当前位置: 代码迷 >> 综合 >> python写文件报错:IOError: [Errno 9] Bad file descriptor
  详细解决方案

python写文件报错:IOError: [Errno 9] Bad file descriptor

热度:29   发布时间:2024-02-19 14:09:23.0

问题现场:

写了一个demo.py,目的是读两个文件x和y,提取两个文件中的某个字段,比较大小,然后将结果保存到一个res.txt的文件中。
demo.py内容如下:

# -*- coding: utf-8 -*-
import json
import sys
import os
file = open('y', 'r')
log_dict = {}
for line in file:json_str = json.loads(line)log_dict[json_str['2001']] = json_str['duration']files = open('x', 'rw')
filename = 'res.txt'
if not os.path.exists(filename):os.system(r"touch {}".format(filename))#调用系统命令行来创建文件
res = open(filename, 'rw')
ch_large_cnt = 0
ch_cnt = 0
for line in files:ch_cnt = ch_cnt + 1line = line.replace('\n', '')  # line.strip() # 把末尾的'\n'删掉line_list = line.split('\t')line_list.append(log_dict[line_list[3]])if float(line_list[4]) - float(log_dict[line_list[3]])/1000 > 0.1:line_list.append('1')ch_large_cnt = ch_large_cnt + 1else:line_list.append('0')new_line = line + '\t' + log_dict[line_list[3]] + '\t' + line_list[6] + '\n'print new_lineres = open(filename, 'r')res.write(new_line)res.close()报错:
Traceback (most recent call last):File "/Users/wang/PycharmProjects/testPro/test.py", line 31, in <module>res.write(new_line)
IOError: File not open for writing

原因:

往res.txt中写文件时,open()函数的参数有误。open(filename, 'r') --->open(filename, 'w')或者open(filename, 'a')

补充:打开和关闭文件

Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。
open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
file object = open(file_name [, access_mode][, buffering])
各个参数的细节如下:

file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

常用的几个模式:
r    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
r+    打开一个文件用于读写。文件指针将会放在文件的开头。
w    打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+    打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
 

  相关解决方案