我需要代碼來重新排列列,同時在不使用 Panda 的情況下更改標題名稱。我還需要省略新 csv 檔案中的一些列。
示例輸入 csv 檔案:
Alfa,Beta,Charlie,Delta,Echo,Foxtrot,Golf,Hotel,India,Juliett,Kilo
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4
A5,B5,C5,D5,E1,F5,G5,H5,I5,J5,K5
A6,B6,C6,D6,E6,F6,G6,H6,I6,J6,K6
A7,B7,C7,D7,E7,F7,G7,H7,I7,J7,K7
A8,B8,C8,D8,E8,F8,G8,H8,I8,J8,K8
A9,B9,C9,D9,E9,F9,G9,H9,I9,J9,K9
到目前為止我所擁有的:
import csv
#Opens and readers csv file
open_cd_csv = open("book1.csv", "r", encoding="utf-8", errors='ignore')
reader_cd_csv = csv.DictReader(open_cd_csv, delimiter=',', quotechar='"')
header_csv = next(reader_cd_csv)
#dictionary sample
dictionary_sample = {
"Beta_New" : reader_cd_csv["Beta"],
"Echo_New" : reader_cd_csv["Echo"],
"Foxtrot_New_All" : reader_cd_csv["Foxtrot"],
"Hotel_New" : reader_cd_csv["Hotel"],
"India_New" : reader_cd_csv["India"],
"Charlie_New" : reader_cd_csv["Charlie"],
}
#Opens and writes csv file
output_test_csv_file = "xtest_file.csv"
open_output_test_csv = open(output_test_csv_file, "w", encoding="utf-8", errors='ignore')
writer_output_test_csv = csv.writer(open_output_test_csv, delimiter=',', quotechar='"')
sample_list = []
for row in reader_cd_csv:
sample_list.append(dictionary_sample(row))
writer_output_test_csv.writerow(sample_list)
輸出 csv 應該是什么樣子:
Beta_New,Echo_New,Foxtrot_New_ALL,Hotel_New,India_New,Charlie_New
B1,E1,F1,H1,I1,C1
B2,E2,F2,H2,I2,C2
B3,E3,F3,H3,I3,C3
B4,E4,F4,H4,I4,C4
B5,E5,F5,H5,I5,C5
B6,E6,F6,H6,I6,C6
B7,E7,F7,H7,I7,C7
B8,E8,F8,H8,I8,C8
B9,E9,F9,H9,I9,C9
uj5u.com熱心網友回復:
你想要這樣的東西:
import csv
fieldnames_dict = {
'Beta': 'Beta_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)
請注意,您的行header_csv = next(reader_cd_csv)不應該在那里,因為它會跳過第一個資料行,而不是標題行,它會自動讀取以學習列鍵。
另請注意,您使用dictionary_samplelike 函式,但它是 adict代替 - 一個不起作用的 dict,因為reader_cd_csv是 a DictReader,并且不能用方括號索引。
最好在陳述句中打開檔案,該with陳述句提供了一個背景關系,該背景關系會在退出背景關系時關閉檔案。在這種情況下,讀取和寫入的背景關系是嵌套的,因為我選擇“同時”完成讀取和寫入。
我使用 aDictWriter作為輸出,它是DictReader. 請參閱檔案以了解如何使用兩者。除此之外,所需要做的就是將每一行的輸入字典轉換為其相應的輸出字典,這是我用字典推導完成的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/466920.html
