簡體   English   中英

使用 Python 修改目錄中的所有文件(循環)

[英]Modify all files in directory using Python (Loop)

我在為我的腳本制作循環時遇到了很多麻煩。 最初腳本正在修改一個 CSV 文件,但我已對其進行編輯以循環通過一個文件夾“CSVtoGD”並修改此文件夾中的每個 csv。 到目前為止沒有運氣。 修改后的腳本是:

from pathlib import Path 
import pandas as pd
dir = r'/users/krzysztofpaszta/CSVtoGD' 
csv_files = [f for f in Path(dir).glob('*.csv')] 



for csv in csv_files: #iterate list
   
    df = pd.read_csv(csv, sep=": \s+", engine='python', names=['dane', 'wartosc'])
    # creating columns with names: ścieżka_do_pliku:czcionka.ttf 
    df['dana_czcionka'] = df['dane'].str.split(':').str[0]

    print('\n--- df ---\n')
    print(df.to_string())

    with open('csv', 'w') as f_out:
        writer = csv.writer(f_out)
    
# sorting data by columns: ścieżka_do_pliku:czcionka.ttf 
        for name, data in df.groupby('dana_czcionka'):
            print('\n---', name, '---\n')
        
            headers = (data['dane'] + ":").to_list()
            print(headers)
    
            values = data['wartosc'].to_list()
            print(values)
            values.insert(0, name) # - Adding name (path) to every row
            values.insert(0, name)
            #writer.writerow(headers) 
            writer.writerow(values)
            
# showing results in terminal, saving to file

    print(f'{csv.name} saved.')

我收到此錯誤:

AttributeError                            Traceback (most recent call last)
/var/folders/zw/12ns4dw96zb34ktc_vfn0zp80000gp/T/ipykernel_49714/1288759270.py in <module>
     16 
     17     with open('csv', 'w') as f_out:
---> 18         writer = csv.writer(f_out)
     19 
     20 # grupowanie danych według kolumn ścieżka_do_pliku:czcionka.ttf

AttributeError: 'PosixPath' object has no attribute 'writer'

我試圖通過修改“作家”來實現這一點,但我想我現在的知識還很少。 我認為一個簡單的循環會得到結果,但我不知道我的循環是構建錯誤還是問題所在..

沒有循環的原始腳本工作正常。 原始腳本(修改一個 csv)如下所示:

import pandas as pd
import csv
df = pd.read_csv('TTF-Projects-INFO.csv', sep=": \s+", engine='python', names=['dane', 'wartosc'])

# creating columns with names like: ścieżka_do_pliku:czcionka.ttf 
df['dana_czcionka'] = df['dane'].str.split(':').str[0]

print('\n--- df ---\n')
print(df.to_string())

with open('newTTF-Projects-INFO.csv', 'w') as f_out:
    writer = csv.writer(f_out)
    
# sorting data by columns: ścieżka_do_pliku:czcionka.ttf 
    for name, data in df.groupby('dana_czcionka'):
        print('\n---', name, '---\n')
        
        headers = (data['dane'] + ":").to_list()
        print(headers)
    
        values = data['wartosc'].to_list()
        print(values)
        values.insert(0, name) # - add name (path) to every row with data
        #writer.writerow(headers) 
        writer.writerow(values)
            
# showing effect in terminal, saving to file

print('\n--- file ---\n')
print(open('newTTF-Projects-INFO.csv').read())

您的問題是名稱沖突。 原始代碼使用import csv來導入庫。 但是您也可以在循環中使用csv作為變量

for csv in csv_files: #iterate list

所以把你的變量名改成這樣:

for csv_file in csv_files: #iterate list

以及以下變量的出現:

...
for csv_file in csv_files: #iterate list
    df = pd.read_csv(csv_file, sep=": \s+", engine='python', names=['dane', 'wartosc'])
    # creating columns with names: ścieżka_do_pliku:czcionka.ttf 
    df['dana_czcionka'] = df['dane'].str.split(':').str[0]

    print('\n--- df ---\n')
    print(df.to_string())

    with open(csv_file, 'w') as f_out:
        writer = csv.writer(f_out)
...
print(f'{csv_file} saved.')

最后,在開頭添加行import csv
現在您的代碼應該按預期工作。


或者,您可以使用該行

import csv as cs

並將作家行更改為

writer = cs.writer(f_out)

在這種情況下,您可以使用csv變量名稱。
但是恕我直言,這在命名約定方面不太清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM