我有兩個 csv 檔案,我需要根據第一列(即第 0 列)合并它們。我不能給他們標題,也不能使用熊貓。這是兩個檔案
學生專業串列.csv
305671,Jones,Bob,Electrical Engineering,
987621,Wong,Chen,Computer Science,
323232,Rubio,Marco,Computer Information Systems,
564321,Awful,Student,Computer Science,Y
769889,Boy,Sili,Computer Information Systems,Y
156421,McGill,Tom,Electrical Engineering,
999999,Genius,Real,Physics,
GPAList.csv
156421,3.4
305671,3.1
323232,3.8
564321,2.2
769889,3.9
987621,3.85
999999,4
我希望生成的 csv 檔案看起來像這樣
FullRoster.csv
305671,Jones,Bob,Electrical Engineering,3.1
987621,Wong,Chen,Computer Science,3.85
323232,Rubio,Marco,Computer Information Systems,3.8
564321,Awful,Student,Computer Science,Y,2.2
769889,Boy,Sili,Computer Information Systems,Y,3.9
156421,McGill,Tom,Electrical Engineering,3.4
999999,Genius,Real,Physics,4
我可以使用什么代碼來實作這一點。請記住,不允許使用 pandas,并且我無法提供檔案標題以使事情變得更容易。我必須按原樣使用它們。謝謝!
編輯:我道歉我沒有包括我擁有的代碼。我不經常使用這個參考,并且在發布之前我沒有熟悉規則。我很抱歉!這是我到目前為止所擁有的,但這段代碼不起作用:
with open('StudentsMajorsList.csv','r') as f2:
reader = csv.reader(f2)
dict2 = {row[0]: row[1:] for row in reader}
with open('GPAList.csv','r') as f1:
reader = csv.reader(f1)
dict1 = OrderedDict((row[0], row[1:]) for row in reader)
result = OrderedDict()
for d in (dict1, dict2):
for key, value in dict.items():
result.setdefault(key, []).extend(value)
with open('FullRoster.csv', 'w') as f:
w = csv.writer(f)
for key, value in result.items():
w.writerow([key] value)
uj5u.com熱心網友回復:
# usage: merge_csv.py <file1> <file2> <output>
# example: merge_csv.py file1.csv file2.csv file3.csv
import csv
import sys
def merge_csv(file1, file2, output):
with open(file1, 'r') as f1, open(file2, 'r') as f2, open(output, 'w') as f3:
reader1 = csv.reader(f1)
reader2 = csv.reader(f2)
writer = csv.writer(f3)
for row1, row2 in zip(reader1, reader2):
if row1[0] == row2[0]:
writer.writerow(row1 row2[1:])
elif row1[0] < row2[0]:
writer.writerow(row1)
else:
writer.writerow(row2)
if __name__ == '__main__':
merge_csv(sys.argv[1], sys.argv[2], sys.argv[3])
print('done')
uj5u.com熱心網友回復:
我就是這樣做的:
import csv
with open('StudentsMajorsList.csv', newline='') as file:
reader = csv.reader(file)
data1 = list(reader)
with open('GPAList.csv', newline='') as file:
reader = csv.reader(file)
data2 = list(reader)
merge1 = []
merge2 = []
merge3 = []
for list1 in data1:
for item in list1:
x = item.split(',')
merge1.append(x)
for list2 in data2:
for item in list2:
x = item.split(',')
merge2.append(x)
for i in range(len(merge1)):
for j in range(len(merge2)):
if(merge1[i][0] == merge2[j][0]):
merge3.append(merge1[i][0:])
merge3[i].append(merge2[j][1])
for item in merge3:
for i in item:
if (i == ''):
item.remove(i)
for item in range(len(merge3)):
print(merge3[item])
with open('FullRoster.csv', 'w') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerows(merge3)
輸出:
['305671', 'Jones', 'Bob', 'Electrical Engineering', '3.1']
['987621', 'Wong', 'Chen', 'Computer Science', '3.85']
['323232', 'Rubio', 'Marco', 'Computer Information Systems', '3.8']
['564321', 'Awful', 'Student', 'Computer Science', 'Y', '2.2']
['769889', 'Boy', 'Sili', 'Computer Information Systems', 'Y', '3.9']
['156421', 'McGill', 'Tom', 'Electrical Engineering', '3.4']
['999999', 'Genius', 'Real', 'Physics', '4']
uj5u.com熱心網友回復:
您需要了解如何使用 Python 的內置csv庫來幫助讀取一行 CSV 值并將其轉換為串列。
解決這個問題的方法是首先將GPAList值讀入字典。這允許輕松查找任何 ID 值。
對于學生 CSV 中的每一行,在字典中查找所需的值并將其附加到剛讀入的行,同時將其寫入輸出 CSV 檔案。
例如:
import csv
with open('GPAList.csv') as f_gpa:
csv_gpa = csv.reader(f_gpa)
gpa = dict(csv_gpa)
with open('StudentsMajorsList.csv') as f_students, open('FullRoster.csv', 'w', newline='') as f_roster:
csv_students = csv.reader(f_students)
csv_roster = csv.writer(f_roster)
for row in csv_students:
csv_roster.writerow([*row, gpa[row[0]]])
我建議您添加一些列印陳述句以更好地了解其作業原理。例如print(gpa)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/471445.html
