2 개의 mysql 테이블에서 2 개의 CSV 파일을 생성했습니다. 이제 2 개의 파일을 병합하고 싶습니다.파이썬을 사용하여 공통 필드를 기반으로 2 개의 CSV 파일을 병합
내가 수동으로 처음 CSV이 헤더를 추가 :
ID,name,sector,sub_sector
이 두 번째 CSV 헤더입니다 :
ID,name,sector,sub_sector,url
:
ID,url
내 목표는 1 개 개의 파일을 가지고있다
참고 : 첫 번째 파일의 전체 레코드가 두 번째 파일에서 일치하는 것은 아닙니다.
#!/usr/bin/env python
import glob, csv
if __name__ == '__main__':
infiles = glob.glob('./*.csv')
out = 'temp.csv'
data = {}
fields = []
for fname in infiles:
df = open(fname, 'rb')
reader = csv.DictReader(df)
for line in reader:
# assuming the field is called ID
if line['ID'] not in data:
data[line['ID']] = line
else:
for k,v in line.iteritems():
if k not in data[line['ID']]:
data[line['ID']][k] = v
for k in line.iterkeys():
if k not in fields:
fields.append(k)
del reader
df.close()
writer = csv.DictWriter(open(out, "wb"), fields, extrasaction='ignore', dialect='excel')
# write the header at the top of the file
writer.writeheader()
writer.writerows(data)
del writer
다른 강도 스레드에서 촬영 :
이 내가 사용 된 조각입니다.
File "db_work.py", line 30, in <module>
writer.writerows(data)
File "/usr/lib/python2.7/csv.py", line 153, in writerows
rows.append(self._dict_to_list(rowdict))
File "/usr/lib/python2.7/csv.py", line 144, in _dict_to_list
", ".join(wrong_fields))
ValueError: dict contains fields not in fieldnames: 4, 4, 4, 6
~/Development/python/DB$ python db_work.py
Traceback (most recent call last):
File "db_work.py", line 30, in <module>
writer.writerows(data)
File "/usr/lib/python2.7/csv.py", line 153, in writerows
rows.append(self._dict_to_list(rowdict))
File "/usr/lib/python2.7/csv.py", line 145, in _dict_to_list
return [rowdict.get(key, self.restval) for key in self.fieldnames]
AttributeError: 'str' object has no attribute 'get'
어떤 아이디어를 어떻게이 문제를 해결하기 위해 : 이 내가지고있어 오류가 무엇입니까?
여기 2 개의 오류가 있습니다. – Evilunclebill
마음을 정교하게? – DjangoPy
내가 잘못 입력했습니다 :-) 첫 번째 오류는 값 오류이므로 오타가 있거나 값이 존재할 경우 시도해 볼 수 있습니다. .get() 오류 - 사전을 정렬하는 중입니까? – Evilunclebill