大家好,所以我有一個關于我遇到的問題的問題。
這是一個示例輸入 csv:
Alfa,Beta,Charlie,Delta,Echo,Foxtrot,Golf,Hotel,India,Juliett,Kilo
A,B1,C1,D1,E1,F1,G1,H1,I1,J1,
A,B2,C2,D2,E2,F2,G2,H2,I2,J2,1
B,B3,C3,D3,E3,F3,G3,H3,I3,J3,
B,B4,C4,D4,E4,F4,G4,H4,I4,J4,
這是我擁有的代碼版本:
import csv
fieldnames_dict = {
'Alfa': 'Alfa_New',
'Echo': 'Echo_New',
'Foxtrot': 'Foxtrot_New_ALL',
'Hotel': 'Hotel_New',
'India': 'India_New',
'Charlie': 'Charlie_New'
}
with open("book1.csv", "r", encoding="utf-8", errors='ignore') as csv_in:
with open("xtest_file.csv", "w", encoding="utf-8", errors='ignore') as csv_out:
reader = csv.DictReader(csv_in, delimiter=',', quotechar='"')
writer = csv.DictWriter(csv_out, delimiter=',', quotechar='"',
fieldnames=list(fieldnames_dict.values()))
writer.writeheader()
for row_in in reader:
row_out = {new: row_in[old] for old, new in fieldnames_dict.items()}
writer.writerow(row_out)
這段代碼所做的幾乎是根據字典重新排列列。
但是,我需要根據新字典重復 csv 檔案的某些行,并重命名該列的行的值。
例如:
second_dictionary = {
'A' : '1ST,2ND,3RD",
'B' : '4TH',
}
該字典需要與“ Alfa ”列進行比較,當它發現它具有“ A ”的值時,它將使用“1ST”、“2ND”和“3RD”的值重復該行。如果“ Alfa ”列的值為“ B ”,它將查看字典并僅將其替換一次作為第 4 個。
輸出應該是什么樣子:
Alfa_New,Echo_New,Foxtrot_New_ALL,Hotel_New,India_New,Charlie_New
1ST,E1,F1,H1,I1,C1
2ND,E1,F1,H1,I1,C1
3RD,E1,F1,H1,I1,C1
1ST,E2,F2,H2,I2,C2
2ND,E2,F2,H2,I2,C2
3RD,E2,F2,H2,I2,C2
4TH,E3,F3,H3,I3,C3
4TH,E4,F4,H4,I4,C4
如您所見,由于輸入檔案有這一行:
Alfa,Beta,Charlie,Delta,Echo,Foxtrot,Golf,Hotel,India,Juliett,Kilo
A,B1,C1,D1,E1,F1,G1,H1,I1,J1,
使用第二個字典,它將需要替換 Alfa 中的“A”并將其復制 3 次,但替換第二個字典中的值:
Alfa_New,Echo_New,Foxtrot_New_ALL,Hotel_New,India_New,Charlie_New
1ST,E1,F1,H1,I1,C1
2ND,E1,F1,H1,I1,C1
3RD,E1,F1,H1,I1,C1
我需要為此做些什么?
uj5u.com熱心網友回復:
也許這會有所幫助:
import csv
fieldnames_dict = {
'Alfa': 'Alfa_New',
'Echo': 'Echo_New',
'Foxtrot': 'Foxtrot_New_ALL',
'Hotel': 'Hotel_New',
'India': 'India_New',
'Charlie': 'Charlie_New'
}
second_dictionary = {
'A': '1ST,2ND,3RD',
'B': '4TH',
}
with open("book1.csv", "r", encoding="utf-8", errors='ignore') as csv_in:
with open("xtest_file.csv", "w", encoding="utf-8", errors='ignore') as csv_out:
reader = csv.DictReader(csv_in, delimiter=',', quotechar='"')
writer = csv.DictWriter(csv_out, delimiter=',', quotechar='"',
fieldnames=list(fieldnames_dict.values()))
writer.writeheader()
for row_in in reader:
row_out = {new: row_in[old] for old, new in fieldnames_dict.items()}
column_name = 'Alfa_New'
column_key = row_out[column_name]
if column_key in second_dictionary.keys():
for item in second_dictionary[column_key].split(','):
row_out[column_name] = item
writer.writerow(row_out)
else:
writer.writerow(row_out)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/471462.html
