2013-12-09 4 views
-1

특정 줄을 찾고 새 파일에 쓰려는 텍스트 파일이 있습니다. 텍스트는 다음과 같이 보입니다 :텍스트의 특정 줄을 새 파일에 쓰는 방법은 무엇입니까?

1552311_a_at NA 6.548202118 6.795958567 6.525295817 6.467153775 
1552312_a_at NA 7.237622005 7.501887409 7.438287339 7.249551462 
1552334_at NA 5.36199913 5.554097857 5.296649894 5.64695338 

나는 많은 문제없이 전에 이런 짓을했습니다,하지만 몇 가지 이유는이 경우에 나를 위해 작동하지 않습니다. 추출 할 텍스트 파일에서 찾고있는 값 목록이 있습니다.

import fileinput 

x = open('file', 'r') 
y = open('file_write', 'w') 
z = [...,...,...] #list of values to search for in file given by user 
def file_transform(filein,fileout,list): 
    for i in list: 
     for line in filein: 
      if list[i] in line: 
       fileout.write(line) 

file_transform(x,y,z) 

file.close() 
file_write.close() 

스크립트가 실행되지만 빈 텍스트 파일로 끝납니다. 내가 어디로 잘못 가고 있는지 이해할 수 없다.

+1

무엇이'z' ?????? (문자 수의 하한선 때문에 물음표가 생깁니다.) – BartoszKP

+0

"for i for list :"및 "for filein for :"스위치? – PasteBT

답변

3

할 수 있습니다 "되감기"이없는 것은 아니다주기를 여러 번 같은 파일, 또한 당신은 목록에주기 을 오용하고 있습니다 :

def file_transform(filein,fileout,z): 
    for i in z: 
     for line in filein: 
      if i in line: 
       fileout.write(line) 
     filein.seek(0) 

하거나, 훨씬 더 :

def file_transform(filein,fileout,z): 
    for line in filein: 
     for i in z: 
      if i in line: 
       fileout.write(line) 

당신이 for i in z에는 실제로 색인이 아닌 목록의 요소가 포함되어 있습니다. 자세한 내용은 this을 참조하십시오.

+0

감사합니다. filein.seek (0)이 당신이 말하는 것일까요? 아니면이 문제를 해결할 더 좋은 방법이 있습니까? iterables와 generators를 더 잘 사용하는 방법을 연구해야한다는 것을 이해합니다. – Tkanno

+0

작전, 당신 말이 맞아요, 파이썬에서'seek (0)'입니다, 나는 C와 혼동을 겪었습니다. 이것은 C가 더 편리한 곳에서 파이썬보다 적은 경우입니다 : P. 편집 됨. – smeso

0

list은 어떤 변수에도 적합하지 않습니다. list은 python의 객체 유형입니다.

with open('file', 'r') as f: 
    x = f.readlines() # this auto closes the file after reading, which is better practice 

y = open('file_write', 'w') 

def file_transform(filein, fileout, z): 
    for line in filein: 
     for i in z: 
      if i in line: 
       fileout.write(line) 
관련 문제