我在為我的腳本制作回圈時遇到了很多麻煩。最初腳本正在修改一個 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())
uj5u.com熱心網友回復:
您的問題是名稱沖突。原始代碼用于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變數名稱。
但是恕我直言,這在命名約定方面不太清楚。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/481835.html
標籤:Python python-3.x 熊猫 循环 CSV
