如何循环目录并清理文件?

问题描述 投票:0回答:2

“嗨,我正在尝试循环遍历目录来修改一些文件。具体来说,我想打开目录“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.
python valueerror
2个回答
4
投票

首先,我认为您的代码中这部分是错误的:

    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
?请编辑您的帖子并添加这些详细信息。


3
投票

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()
© www.soinside.com 2019 - 2024. All rights reserved.