您好,我正在嘗試僅使用 csv 模塊對我的 csv 檔案進行分組,并將結果輸入到另一個 csv 檔案中。我遇到的問題是其他欄位被附加到制造商的第一個欄位中,我希望在正確的欄位中完成此操作。在row[3]car_details 中保存并在row[4]汽車中。匯入 csv
result = {}
fields=['test','name','object']
with open('work.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
writer = csv.writer(open("art1.csv",'w',newline=''), delimiter=';')
for row in csvreader:
if row[0] in result:
result[row[0]].append(row[3])
else:
result[row[0]] = [row[1]]
with open('art1.csv', 'w') as csvfile:
# writer.writerow(fields)
csvwriter = csv.writer(csvfile)
for row in result.items():
csvwriter.writerow(row)
reader = csv.reader(open("art1.csv", "r",newline=''), delimiter=',')
writer = csv.writer(open("artgain2.csv",'w',newline=''), delimiter=';')
writer.writerow(fields)
writer.writerows(reader)
.csv 檔案:
toyota fast Prius
toyota slow yaris
toyota fast corolla
toyota slow sunshine
mercedes fast benz
mercedes fast something
mazda fast bus
我想要的結果
manufacturer car_details car
toyota fast Prius
slow yaris
fast corolla
slow sunshine
mercedes fast benz
fast something
mazda fast bus
我得到的結果:
manufacturer car_details car
toyota,fast,Priusslow,yaris,fast,corolla,slow,sunshine,
mercedes,fast,benz,fast,something
mazda,fast,bus
一切都在制造商列中,我不知道如何在相應的欄位中正確拆分它我覺得我非常接近解決方案,我可能忘記了一些東西有人可以幫我嗎?
uj5u.com熱心網友回復:
我假設您使用 MS excel 打開您的 .CSV 檔案并且您有歐洲語言設定?這種假設的原因是,您似乎使用“;” 作為輸出檔案中的分隔符。因此,excel不會將結果檔案中的“,”解釋為分隔符似乎是合理的。此外,您的結果檔案中似乎沒有適當的換行符。
在您的所有檔案中,我看不到任何索引為 3 或 4 的行。這似乎是一個高索引...
建議的解決方案
import csv
class ExcelEuropeDialect(csv.Dialect):
delimiter = ';'
lineterminator = '\r\n'
quotechar = '"'
quoting = csv.QUOTE_MINIMAL
csv.register_dialect('excel_eu', ExcelEuropeDialect)
result = []
item_occured = [] # list with all items already occured
fields=['test','name','object']
with open('work.csv', 'r', newline='') as csvfile:
csvreader = csv.reader(csvfile, dialect='excel')
for row in csvreader:
if row[0] in item_occured:
row[0] = '' # empty first cell
else:
item_occured.append(row[0]) # add item to item_occured
row = [s.strip() for s in row]
result.append(row) # append whole row
with open('art1.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile, dialect=csv.get_dialect('excel_eu'))
csvwriter.writerow(fields)
csvwriter.writerows(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487938.html
