循环浏览目录和干净的文件

2024-04-25 13:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试循环浏览目录。目标是打开目录ff并对文件进行修改。为什么open (ff, 'r')不起作用

文件d.txt在每一行中都有数字和符号x1"。我想从每行中删除这些字符

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.

Tags: 文件in目录txt目标forosline
2条回答

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()

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

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

相关问题 更多 >