Я новичок в программировании и хочу написать эту программу, которая передает общие столбцы между file1.csv
и file2.csv
.
Ввод:
file1.csv
выглядит так:
ID,Nickname,Gender,SubjectPrefix,SubjectFirstName,Whatever1A,Whaterver2A,SubjectLastName
1,J.,M,Dr.,Jason,,,Allan
2,B.,M,Mr.,Brian,,,Welch
file2.csv
выглядит так:
nickname,gender,city,id,prefix_name,first_name,Whatever1B,last_name,Whatever2B,Whatever3B,Whatever4B
Проблема:
Как сравнить заголовок file1.csv
и file1.csv
, чтобы определить, а затем перенести между ними «общие» столбцы. «Общие» столбцы — это столбцы с похожими соглашениями об именах (например, ID
и id
, Nickname
и nickname
) или те, которые не обязательно имеют одинаковые соглашения об именах, но хранят одинаковые данные (например, SubjectPrefix
и prefix_name
, SubjectFirstName
и first_name
).
Вывод:
Вывод должен быть таким.
Примечание. переданные столбцы
"id"
,"nickname"
и"gender"
имеют одинаковые названия между заголовкамиfile1.csv
иfile2.csv
. А столбцы"prefix_name"
и"first_name"
соответствуют"SubjectPrefix"
и"SubjectFirstName"
соответственно.id,nickname,gender,prefix_name,first_name,last_name 1,J.,M,Dr.,Jason,Allan 2,B.,M,Mr.,Brian,Welch
Я пробовал этот код:
import csv
import collections
csv_file1 = "file1.csv"
csv_file2 = "file2.csv"
data1 = list(csv.reader(file(csv_file1,'r')))
data2 = list(csv.reader(file(csv_file2,'r')))
file1_header = data1[0][:] #get the header from file1
file2_header = data2[0][:] #get the header from file2
lowered_file1_header = [item.lower() for item in file1_header] #lowercase file1 header
lowered_file2_header = [item.lower() for item in file2_header] #lowercase file2 header anyways
col_index_dict = {}
for column in lowered_file1_header:
if column == "subjectprefix": # identify "subjectprefix" column in file1.csv
col_index_dict[column] = lowered_file1_header.index(column)
elif column == "subjectfirstname": # identify "subjectfirstname" column in file1.csv
col_index_dict[column] = lowered_file1_header.index(column)
elif column in file2_header: # identify the columns with same naming
col_index_dict[column] = lowered_file1_header.index(column)
else:
col_index_dict[column] = -1 # mark the not matching columns
# Build header
output = [col_index_dict.keys()]
is_header = True
for row in data1:
if is_header is False:
rowData = []
for column in col_index_dict:
column_index = col_index_dict[column]
if column_index != -1:
rowData.append(row[column_index])
else:
rowData.append('')
output.append(rowData)
else:
is_header = False
print(output)
Любая идея, как решить эту проблему?