亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用 os.path 使用文件搜索創建 CSV 文件

嘗試使用 os.path 使用文件搜索創建 CSV 文件

一只斗牛犬 2022-07-12 18:02:59
我想打開包含所有文件的主文件夾(1),搜索文件并只抓取標題中帶有“mtn”的任何 .txt 文件(2),打印 txt 文件列表(3)然后列出 txt csv 文件中的文件,包括它們的完整路徑 (4)。我可以使用我當前的代碼執行 (1) 到 (3),但是生成的 CSV 文件只包含最后一個文件名,所以我認為我的循環順序有問題mtnpath = r"G:\somepath\"num_files = 0for root, dirs, files in os.walk(mtnpath):    for filename in files:        if fnmatch.fnmatch(filename, '*mtn*'):            num_files = num_files + 1            with open(mtnpath + "/" + "txt_file_list.csv", 'w+', newline='') as f:                thewriter = csv.writer(f)                # write the header row                thewriter.writerow(['Filename', 'Path', ])                # write the rest of the rows with files and path                thewriter.writerow([filename, 'Path', ])            print(filename)print("The total number of mtn files found was " + str(num_files))在控制臺中,我得到了文件名的運行列表和最后找到的 565 個文件的語句。CSV 文件應該列出所有這些文件,但只有最后一個。我嘗試for在標題下縮進另一個循環:    for filename in files:         thewriter.writerow([filename, 'Directory', ])但這也不起作用。
查看完整描述

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))


查看完整回答
反對 回復 2022-07-12
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

模式字符串'w+'會導致任何現有內容被截斷?;蛟S可以進一步查看python open 內置函數:模式 a、a+、w、w+ 和 r+ 之間的區別?

無論如何,您都不想重復打開和關閉同一個文件;只需在主循環之外打開一次,然后在您有更多內容要寫時編寫。

(切換到'a'而不是'w+'將通過最小的更改來修復您的代碼;但是您隨后會導致操作系統執行相當多的操作來打開文件,尋找到最后,然后為您要編寫的每一行再次關閉它。 )


查看完整回答
反對 回復 2022-07-12
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號