Python 文件 IO 和压缩文件。尝试遍历文件夹中的所有文件,然后使用 Python 遍历相应文件中的文本
Python file-IO and zipfile. Trying to loop through all the files in a folder and then loop through the texts in respective file using Python
正在尝试提取所有 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)
您应该始终使用 with
打开您的文件,因为它会自动关闭它们。如果文件不大,您可以简单地 fOut.write(f.read())
并删除循环。
您还设置了 path = dir_name
,这意味着路径将设置为第一个循环中 dir_name
的最后一个值,这可能是您想要的,也可能不是您想要的。您还可以使用 iglob
来避免创建完整列表 zip_files = glob.iglob('*.zip')
.
正在尝试提取所有 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)
您应该始终使用 with
打开您的文件,因为它会自动关闭它们。如果文件不大,您可以简单地 fOut.write(f.read())
并删除循环。
您还设置了 path = dir_name
,这意味着路径将设置为第一个循环中 dir_name
的最后一个值,这可能是您想要的,也可能不是您想要的。您还可以使用 iglob
来避免创建完整列表 zip_files = glob.iglob('*.zip')
.