“嗨,我正在尝试循环遍历目录来修改一些文件。具体来说,我想打开目录“ff”来更改里面的文件。
我尝试使用 open(ff, 'r'),但它没有按预期工作。
此外,文件(例如 d.txt)每行都包含数字和符号,如“x”、“1”和引号。我正在寻找一种方法来从每一行中删除这些字符。你能帮我解决这个问题吗?”
import os
filenames= os.listdir (".")
for filename in filenames:
ff = os.path.join(r'C:\Users\V\Documents\f\e\e\data', filename, 'd.txt')
f = open(str(ff),'r') #this line does not open the file
a = ['x','1','"']
lst = []
for line in f:
for word in a:
if word in line:
line = line.replace(word,'')
lst.append(line)
f.close()
我遇到的错误:
for line in f:
ValueError: I/O operation on closed file.
首先,我认为您的代码中这部分是错误的:
for filename in filenames:
ff = os.path.join(r'C:\Users\V\Documents\f\e\e\data', filename, 'd.txt')
因为这会将最后一个文件名分配给
ff
。所以我将以下代码移到了这个 for 循环下。现在它将针对所有文件运行。
我相信这段代码应该可以工作:
import os
filenames = os.listdir('.')
lst = []
a = ['x','1','"']
for filename in filenames:
ff = os.path.join(r'C:\Users\V\Documents\f\e\e\data', filename, 'd.txt')
with open(ff,'r') as file:
for line in file:
for word in a:
if word in line:
line = line.replace(word,'')
lst.append(line)
with open(ff,'w') as file:
for line in lst:
file.write(line)
编辑:如果
open('ff','r')
行不起作用,那么您给出的路径可能是错误的。 filenames
的内容是什么?为什么最后要加d.txt
?请编辑您的帖子并添加这些详细信息。
将
f.close()
移至循环之外。每次循环运行时您都会关闭文件。
import os
filenames= os.listdir (".")
for filename in filenames:
ff = os.path.join(r'C:\Users\V\Documents\f\e\e\data', filename, 'd.txt')
f = open(str(ff),'r') #this line does not open the file
a = ['x','1','"']
lst = []
for line in f:
for word in a:
if word in line:
line = line.replace(word,'')
lst.append(line)
f.close()