2012-04-20 2 views
0

명확한 설명 : 그래서 내 파일은 10 개 라인이있는 경우 : 첫 번째 줄은 제목, 그래서 내가 첫 번째 줄의 끝에서추가 문자열

다음 몇 가지 텍스트를 추가 할을 I I는 그리스트를 읽어 해당 요소와 각 행 ..

그래서 기본적리스트 [0] 번째 라인 목록 [1]의 단부를 추가 할 9 개 요소를 포함하는리스트 ..

을 세 번째 라인 등 ..


나는 쉼표로 구분 된 파일을 가지고 있습니다. 이 같은 뭔가 :

이 "D"가 실제로 목록에 저장됩니다
A,B,C,D #append "D" just once 
0.123,222,942,99293 
............ 

그래서 그래 내가 가지고 어떻게이 "D" 을 수행

A,B,C 
0.123,222,942 
...... 

는 지금은 이런 일을하고 싶지 이 작업을 수행? 나는 순진한 방법을 안다. 각 라인을 통해 이동하고 기본적으로

string += str(list[i]) 

같은 일을 같은 내가 어떻게 파이썬 방법 :에있는 파일의 마지막에 뭔가를 추가 할

+3

'파일 끝에있는 것'으로 무엇을했는지 분명히 말하십시오. 일반적으로 말 그대로 오른쪽에 쓰인 것 같습니다. 그러나 예제에서는 파일의 특정 줄 끝까지 추가하는 것을 보여줍니다. 이것은 매우 다른 문제입니다. 또한 이미 시도한 코드를 게시하십시오. –

+0

파일의 _end_에 추가하지 않으려는 경우 _in_ 파일을 찾고 "D"(또는 원하는 문자열)를 추가 하시겠습니까? – Shep

+0

안녕하세요, 기본적으로 각 줄 끝입니다. 그래서 파일에 20 줄이 있으면 len 19의 목록을 갖게됩니다. 첫번째 줄은 표제어이고 나머지 19 개 부분은 목록에서 읽고 해당 목록에 대응하는 줄을 추가하고 싶습니다 – Fraz

답변

4

그냥 새 파일 생성 :

data = ['header', 1, 2, 3, 4] 

with open("infile", 'r') as inf, open("infile.2", 'w') as outf: 
    outf.writelines('%s,%s\n' % (s.strip(), n) for s, n in zip(inf, data)) 

입력 파일을 "업데이트"하려는 경우 나중에 새 파일의 이름을 변경하십시오.

import os 
os.unlink("infile") 
os.rename("infile.2", "infile") 
+0

펀치에 나를 때리고 더 멋지게 보입니다 ... – Shep

2

짧은 대답 : the csv module을 사용하십시오.

긴 대답은 :

import csv 

newvalues = [...] 

with open("path/to/input.csv") as file: 
    data = list(csv.reader(file)) 

with open("path/to/input.csv", "w") as file: 
    writer = csv.writer(file) 
    for row, newvalue in zip(data, newvalues): 
     row.append(newvalue) 
     writer.writerow(row) 

물론,이 같은 길이되는 파일의 행 및 newvalues에 따라 달라집니다. 그렇지 않은 경우 zip_longest과 같은 값을 사용하여 초과 된 행을 지정된 값으로 채울 수 있습니다.

당신이 다른 파일에이 일을하는 경우

, 우리는 훨씬 더 쉽게 작업을 수행 할 수 있습니다

import csv 

newvalues = [...] 

with open("path/to/input.csv") as from, open("path/to/output.csv", "w") as to: 
    reader = csv.reader(from) 
    writer = csv.writer(to) 
    for row, newvalue in zip(reader, newvalues): 
     row.append(newvalue) 
     writer.writerow(row) 

를 이것은 또한, 전체 파일을 메모리로 읽어하지 않는 장점이 매우 큰 파일이 너무 더 나은 해결책입니다.