2012-03-03 3 views
3

안녕하세요 여러분 filename.txt를 입력하고 filename1.txt, filename2.txt 및 filename3.txt 여러 개의 출력 파일을 생성하고 있습니다.텍스트 파일을 입력하고 파이썬에서 여러 개의 출력 파일을 작성하십시오.

Time(ms) Channel 1 Channel 2 Channel 3 
0.0  4.5  3.6  125 
1.0  3.0  3.4  98 
2.0  100  3.0  59 
3.0  23   45.9  2.1 
4.0  34   123  35 
5.0  2.1  222  98 

filename1.txt는 열 시간과 채널 1 filename2.txt는 열 시간의 데이터를 생성해야하며, 채널 2 파일 이름 3의 데이터를 생성한다 : 여기에 구체적하려면 파일 이름 .txt에서 입력 데이터입니다 .txt를 열만 시간 및 채널의 데이터를 생성한다 3

소스 코드 :

with open('filename.txt', 'r') as input: 
    for i in range(1,4): 
     with open('filename%i.txt' %i, 'w') as output: 
      for line in input: 
       columns = line.strip().split() 
       for j in range(1,4): 
        output.write('{:10}{:10}\n'.format(columns[0], columns[j+1])) 

내가 텍스트 파일은 filename1, filename2 및 파일 이름 3 만 데이터 파일 이름 1에서 얻을 수 컴파일. filename2 및 filename3 데이터에는 어떤 변화가 있습니까?

+0

돌아가서 일부 또는 모든 질문에 대한 대답을 받아 들여야합니다. 자세한 내용은 메타에 대한 답변을 참조하십시오. http://meta.stackexchange.com/a/5235/166957 –

답변

4

for line in inputinput 파일의 모든 라인을 소모합니다. 파일을 다시로드하고 다시 처음부터 다시 시작해야하는 경우 ... 처음에 다시 시작하거나 다른 목록으로 먼저 복사해야합니다.

+0

감사합니다. 파이썬으로 시작합니다. C보다 더 좋아해. – guiNachos

4

입력을 한 번만 읽었지만 모든 행에 걸쳐 세 번 반복하려고했습니다. 3 개의 출력을 모두 열고 동시에 모든 출력을 쓸 수도 있고 입력을 3 번 열 수도 있습니다 (각 출력 파일에 대해 한 번). 가장 좋은 방법은 특정 요구 사항 (파일 크기, 출력 파일 수 등)에 따라 다릅니다.

오픈 3 회 청소기 코드를 생성하지만, 덜 효율적이 될 수 있습니다

for i in range(1,4): 
    with open('filename.txt', 'r') as input: 
     with open('filename%i.txt' %i, 'w') as output: 
      for line in input: 
       columns = line.strip().split() 
       output.write('{:10}{:10}\n'.format(columns[0], columns[i])) 

with 절하지 않고 더 나은 것 한 번에 모든 출력 파일을 열기위한 일반화 된 솔루션 :

files = [open('filename%i.txt' %i, 'w') for i in range(1,4)] 
with open('filename.txt', 'r') as input: 
    for line in input: 
     columns = line.strip().split() 
     for j in range(1,4): 
      files[j-1].write('{:10}{:10}\n'.format(columns[0], columns[j])) 
for f in files: 
    f.close() 

(이 경우 수동으로 예외를 처리해야합니다.)

+0

감사합니다. 나는 단지 한 번 읽는 것만 알고 있지만 세 번 쓰는 것을 깨달았습니다. "j"변수에는 의미가 있습니까? – guiNachos

+0

nope. 내 실수, 코드를 적용 할 때 "j"를 거기에서 떠났습니다. 답변이 업데이트되었습니다. – mgibsonbr

2

그냥 팁. 2 with 문 후, 또한 트릭을 할 수

input.seek(0) 

추가 할 수 있습니다.

관련 문제