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+'
會導致任何現有內容被截斷?;蛟S可以進一步查看python open 內置函數:模式 a、a+、w、w+ 和 r+ 之間的區別?
無論如何,您都不想重復打開和關閉同一個文件;只需在主循環之外打開一次,然后在您有更多內容要寫時編寫。
(切換到'a'
而不是'w+'
將通過最小的更改來修復您的代碼;但是您隨后會導致操作系統執行相當多的操作來打開文件,尋找到最后,然后為您要編寫的每一行再次關閉它。 )
添加回答
舉報