Python文件-IO和zipfile。尝试遍历文件夹中的所有文件,然后使用Python循环遍历各个文件中的文本
尝试提取所有压缩文件并为所有文件所在的文件夹提供相同的名称。 循环浏览文件夹中的所有文件,然后遍历这些文件中的行以写入不同的文本文件。
这是到目前为止我的代码:Python文件-IO和zipfile。尝试遍历文件夹中的所有文件,然后使用Python循环遍历各个文件中的文本
#!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'
您需要打开该文件,并且还加入了文件的路径,也使用splitlines和然后添加一个新行每行是有点多余:
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)
你应该总是使用with
打开你的文件,因为它会关闭它们自动。如果文件不大,你可以简单地fOut.write(f.read())
并删除循环。
您还设置了path = dir_name
这意味着路径将被设置为dir_name
的最后一个值在您的第一个循环中,这可能是也可能不是您想要的。您也可以使用iglob
来避免创建完整列表zip_files = glob.iglob('*.zip')
。
你是上帝!非常感谢你。奇迹般有效。 – 2015-04-02 17:10:57
不用担心,只要确保'dir_name'就是您认为的那样。 – 2015-04-02 17:12:03
事情是这样的,我已经有了python的零经验。我这样做是为了编程语言课的调查。我只有一周的时间,我正在努力寻找帮助。 – 2015-04-02 17:18:07
'filename'是一个字符串。而不是'read()'字符串,你需要打开文件然后阅读它。 – axblount 2015-04-02 17:25:05