CSV 파일에 새 열을 추가하는 방법은 무엇입니까?
다음과 같은 CSV 파일 이 여러 개 있습니다.
Input
Name Code
blackberry 1
wineberry 2
rasberry 1
blueberry 1
mulberry 2
모든 CSV 파일에 새 열을 추가하여 다음과 같이 표시하고 싶습니다.
Output
Name Code Berry
blackberry 1 blackberry
wineberry 2 wineberry
rasberry 1 rasberry
blueberry 1 blueberry
mulberry 2 mulberry
지금까지 가지고있는 스크립트는 다음과 같습니다.
import csv
with open(input.csv,'r') as csvinput:
with open(output.csv, 'w') as csvoutput:
writer = csv.writer(csvoutput)
for row in csv.reader(csvinput):
writer.writerow(row+['Berry'])
(Python 3.2)
그러나 출력에서 스크립트는 모든 행을 건너 뛰고 새 열에는 Berry 만 있습니다.
Output
Name Code Berry
blackberry 1 Berry
wineberry 2 Berry
rasberry 1 Berry
blueberry 1 Berry
mulberry 2 Berry
이를 통해 수행 할 작업에 대한 아이디어를 얻을 수 있습니다.
>>> v = open('C:/test/test.csv')
>>> r = csv.reader(v)
>>> row0 = r.next()
>>> row0.append('berry')
>>> print row0
['Name', 'Code', 'berry']
>>> for item in r:
... item.append(item[0])
... print item
...
['blackberry', '1', 'blackberry']
['wineberry', '2', 'wineberry']
['rasberry', '1', 'rasberry']
['blueberry', '1', 'blueberry']
['mulberry', '2', 'mulberry']
>>>
편집, py3k에서 사용해야합니다. next(r)
답변을 받아 주셔서 감사합니다. 여기에 보너스 (작업 스크립트)가 있습니다.
import csv
with open('C:/test/test.csv','r') as csvinput:
with open('C:/test/output.csv', 'w') as csvoutput:
writer = csv.writer(csvoutput, lineterminator='\n')
reader = csv.reader(csvinput)
all = []
row = next(reader)
row.append('Berry')
all.append(row)
for row in reader:
row.append(row[0])
all.append(row)
writer.writerows(all)
참고
- 의
lineterminator
매개 변수csv.writer
. 기본적으로로 설정되어'\r\n'
있으며 이것이 이중 간격이있는 이유입니다. - 목록을 사용하여 모든 줄을 추가하고
writerows
. 파일이 매우 크면 이것은 좋은 생각 (RAM)이 아닐 수 있지만 일반 파일의 경우 I / O가 적기 때문에 더 빠르다고 생각합니다. 이 게시물의 주석에서 알 수 있듯이 두
with
문 을 중첩하는 대신 동일한 줄에서 수행 할 수 있습니다.csvinput으로 open ( 'C : /test/test.csv', 'r'), csvoutput으로 open ( 'C : /test/output.csv', 'w') 사용 :
아무도 Pandas를 제안하지 않았다는 것에 놀랐습니다. Pandas와 같은 종속성 집합을 사용하는 것은 이러한 쉬운 작업에 필요한 것보다 더 부담스러워 보일 수 있지만 매우 짧은 스크립트를 생성하며 Pandas는 모든 종류의 CSV (실제로 모든 데이터 유형) 데이터 조작을 수행 할 수있는 훌륭한 라이브러리입니다. . 4 줄의 코드로 논쟁 할 수 없습니다.
import pandas as pd
csv_input = pd.read_csv('input.csv')
csv_input['Berries'] = csv_input['Name']
csv_input.to_csv('output.csv', index=False)
자세한 내용은 Pandas 웹 사이트 를 확인하세요 !
내용 output.csv
:
Name,Code,Berries
blackberry,1,blackberry
wineberry,2,wineberry
rasberry,1,rasberry
blueberry,1,blueberry
mulberry,2,mulberry
import csv
with open('input.csv','r') as csvinput:
with open('output.csv', 'w') as csvoutput:
writer = csv.writer(csvoutput)
for row in csv.reader(csvinput):
if row[0] == "Name":
writer.writerow(row+["Berry"])
else:
writer.writerow(row+[row[0]])
아마도 그런 것이 당신이 의도 한 것일까 요?
또한 csv는 쉼표로 구분 된 값을 나타냅니다. 따라서 다음과 같이 값을 구분하려면 쉼표가 필요합니다.
Name,Code
blackberry,1
wineberry,2
rasberry,1
blueberry,1
mulberry,2
팬더를 사용했는데 잘 작동했습니다. 사용하는 동안 파일을 열고 임의의 열을 추가 한 다음 동일한 파일에만 다시 저장해야했습니다.
이 코드는 여러 열 항목을 추가하므로 필요한만큼 편집 할 수 있습니다.
import pandas as pd
csv_input = pd.read_csv('testcase.csv') #reading my csv file
csv_input['Phone1'] = csv_input['Name'] #this would also copy the cell value
csv_input['Phone2'] = csv_input['Name']
csv_input['Phone3'] = csv_input['Name']
csv_input['Phone4'] = csv_input['Name']
csv_input['Phone5'] = csv_input['Name']
csv_input['Country'] = csv_input['Name']
csv_input['Website'] = csv_input['Name']
csv_input.to_csv('testcase.csv', index=False) #this writes back to your file
해당 셀 값이 복사되지 않도록하려면 먼저 csv 파일에 수동으로 빈 열을 만듭니다. 이름을 Hours로 지정한 것처럼 이제 위의 코드에이 줄을 추가 할 수 있습니다.
csv_input['New Value'] = csv_input['Hours']
또는 단순히 수동 열을 추가하지 않고도
csv_input['New Value'] = '' #simple and easy
도움이 되었기를 바랍니다.
I don't see where you're adding the new column, but try this:
import csv
i = 0
Berry = open("newcolumn.csv","r").readlines()
with open(input.csv,'r') as csvinput:
with open(output.csv, 'w') as csvoutput:
writer = csv.writer(csvoutput)
for row in csv.reader(csvinput):
writer.writerow(row+","+Berry[i])
i++
This code will suffice your request and I have tested on the sample code.
import csv
with open(in_path, 'r') as f_in, open(out_path, 'w') as f_out:
csv_reader = csv.reader(f_in, delimiter=';')
writer = csv.writer(f_out)
for row in csv_reader:
writer.writerow(row + [row[0]]
Yes Its a old question but it might help some
import csv
import uuid
# read and write csv files
with open('in_file','r') as r_csvfile:
with open('out_file','w',newline='') as w_csvfile:
dict_reader = csv.DictReader(r_csvfile,delimiter='|')
#add new column with existing
fieldnames = dict_reader.fieldnames + ['ADDITIONAL_COLUMN']
writer_csv = csv.DictWriter(w_csvfile,fieldnames,delimiter='|')
writer_csv.writeheader()
for row in dict_reader:
row['ADDITIONAL_COLUMN'] = str(uuid.uuid4().int >> 64) [0:6]
writer_csv.writerow(row)
ReferenceURL : https://stackoverflow.com/questions/11070527/how-to-add-a-new-column-to-a-csv-file
'programing' 카테고리의 다른 글
HAX 장치를 열지 못했습니다! (0) | 2021.01.18 |
---|---|
사용자가 웹 응용 프로그램에 로그인 할 때 "로그인 상태 유지"를 구현하는 방법 (0) | 2021.01.17 |
잠금 및 잠금 해제를위한 Eventviewer eventid (0) | 2021.01.17 |
클립 보드에서 R로 데이터를 복사하여 붙여 넣는 방법은 무엇입니까? (0) | 2021.01.17 |
Android Studio-mergeDebugResources 예외 (0) | 2021.01.17 |