2 回答
TA贡献1824条经验 获得超8个赞
w+您在模式下多次打开文件(在文档中对此进行了解释),这会导致其内容每次都被截断 - 这就是为什么您只看到最后一个。您实际上只需要打开文件一次,然后可以根据需要向其中写入行。
这就是我的意思:
import csv
import fnmatch
import os
mtn_path = r'G:\somepath'
pattern = '*mtn*'
txt_file_csv_path = os.path.join(mtn_path, 'txt_file_list.csv')
with open(txt_file_csv_path, 'w+', newline='') as f:
thewriter = csv.writer(f)
# Write a header row.
thewriter.writerow(['Filename', 'Path', ])
num_files = 0
for root, dirs, files in os.walk(mtn_path):
for filename in files:
if fnmatch.fnmatch(filename, pattern):
num_files += 1
thewriter.writerow((filename, os.path.join(root, filename)))
print(filename)
print('The total number of mtn files found was ' + str(num_files))
TA贡献1829条经验 获得超9个赞
模式字符串'w+'
会导致任何现有内容被截断。或许可以进一步查看python open 内置函数:模式 a、a+、w、w+ 和 r+ 之间的区别?
无论如何,您都不想重复打开和关闭同一个文件;只需在主循环之外打开一次,然后在您有更多内容要写时编写。
(切换到'a'
而不是'w+'
将通过最小的更改来修复您的代码;但是您随后会导致操作系统执行相当多的操作来打开文件,寻找到最后,然后为您要编写的每一行再次关闭它。 )
添加回答
举报