[英]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.