Python文件IO和zipfile。尝试循环遍历文件夹中的所有文件,然后使用Python循环遍历相应文件中的文本

Python文件IO和zipfile。尝试循环遍历文件夹中的所有文件,然后使用Python循环遍历相应文件中的文本,python,python-3.x,file-io,nested-loops,zipfile,Python,Python 3.x,File Io,Nested Loops,Zipfile,尝试提取所有zip文件,并为所有文件所在的文件夹指定相同的名称。 在文件夹中的所有文件中循环,然后在这些文件中的行中循环,以写入不同的文本文件。 这是我目前的代码: #!usr/bin/env python3 import glob import os import zipfile zip_files = glob.glob('*.zip') for zip_filename in zip_files: dir_name = os.path.splitext(zip_filename)

尝试提取所有zip文件,并为所有文件所在的文件夹指定相同的名称。 在文件夹中的所有文件中循环,然后在这些文件中的行中循环,以写入不同的文本文件。
这是我目前的代码:

#!usr/bin/env python3
import glob
import os
import zipfile

zip_files = glob.glob('*.zip')
for zip_filename in zip_files:
    dir_name = os.path.splitext(zip_filename)[0]
    os.mkdir(dir_name)
    zip_handler = zipfile.ZipFile(zip_filename, "r")
    zip_handler.extractall(dir_name)

path = dir_name
fOut = open("Output.txt", "w")

for filename in os.listdir(path):
    for line in filename.read().splitlines():
        print(line)
        fOut.write(line + "\n")
fOut.close()
这就是我遇到的错误:

for line in filename.read().splitlines():
AttributeError: 'str' object has no attribute 'read'

您需要打开文件并连接到文件的路径,还需要使用拆分行,然后在每行中添加换行,这有点多余:

path = dir_name
with open("Output.txt", "w") as fOut:    
    for filename in os.listdir(path):
        # join filename to path to avoid file not being found
        with open(os.path.join(path, filename)):
            for line in filename:
                fOut.write(line)
您应该始终使用
来打开文件,因为它会自动关闭文件。如果文件不大,您可以简单地
fOut.write(f.read())
并删除循环


您还可以设置
path=dir\u name
,这意味着path将被设置为第一个循环中
dir\u name
的最后一个值,这可能是您想要的,也可能不是您想要的。您还可以使用
iglob
来避免创建完整的列表
zip\u files=glob.iglob('*.zip')

您就是上帝!非常感谢你。工作起来很有魅力。不用担心,只要确保
dir\u name
就是你认为的那样。问题是在此之前我对python没有任何经验。我这样做是作为我的程序设计语言课程调查的一项作业。我只有一个星期的时间,我正在努力寻找帮助。@AnjilDhamala如果他们是上帝,并且它像一个符咒一样起作用,你为什么不接受这个答案?一定忘了。那时我对stackoverflow还比较陌生。完成了<代码>文件名是一个字符串。您需要打开文件然后读取,而不是
read()
ing字符串。