2014-06-12 1 views
0

내 목표는 두 개의 텍스트 파일을에서 읽을 파일 B에서 같은 라인을 교체하고 파일 C.로 저장해야 할 파일 A의 행을 식별하는 것입니다 내가의 readlines/반복/일치하는 문자열

파일 A에서 특정 줄을 가져 오는 방법에 매달려 있습니다. 전체 줄이 필요합니다. 검색 가능한 문자열은 본질적으로 첫 번째 X 문자이고, 항상 :로 시작합니다.

from PyQt4.QtGui import * 

searchable_strings = (':ABC',':123',':DEF') 
entries_from_a = [] 

app = QApplication(sys.argv) 

with open(unicode (QFileDialog.getOpenFileName())) as file_a: 
    readlines_a = file_a.read() 
file_a.closed 

with open(unicode (QFileDialog.getOpenFileName())) as file_b: 
    readlines_b = file_b.read() 
file_b.closed 
app.quit() 

for line in readlines_a: 
    for item in searchable_strings: 
     if item in line: 
      entries_from_a.append(line) 
  • 이 작업을 수행하려면 완전히 다른 방법은 무엇입니까?
  • 사용자가 매번 파일을 선택하기를 원하기 때문에 QApplication을 사용하고 있습니다.
  • 현재 아무것도 이제까지 보조 노트에
  • 을 entries_from_a에 추가되지 않습니다, 나는 그것을 실행할 때마다 하나의 시간, 나는이 오류로 인해

    는 QWidget에 스파이더를 종료하고 계속 새 창을 열 필요가있다 : for line in readlines_a 한 번에 하나 개의 문자를 읽어 때문에 QPaintDevice

+0

코드는'readlines_b'을 전혀 사용하지 않습니다. 그럼 왜 그걸 사용하니? – thefourtheye

+0

아직. 동일한 문자열에 대해 readlines_b를 일치시켜야하고 해당 줄을 통해 해당 entries_from_a를 써야합니다. – mauve

답변

1

처럼 @Vor은 문자열의 루프에 대한,하지만를 통해 문자로 라인을 통해 반복되지 않습니다 말했다. file_a.read()은 전체 파일을 하나의 문자열로 반환합니다. 예를 들어 readlines_a = file_a.readlines()을 사용하면 file_a 행 목록을 반환합니다. 따라서 목록 작성을 사용하는 것이 더 빠른 옵션 일 수 있으며 파일 크기가 클 경우 더 좋습니다. 그런 다음 for 루프는 의도 한대로 회선을 반복합니다.

with open(unicode (QFileDialog.getOpenFileName())) as file_a: 
    readlines_a = file_a.readlines() # readlines() method 

with open(unicode (QFileDialog.getOpenFileName())) as file_a: 
    readlines_a = [line for line in file_a] # list comprehension 

다음 루프

또는

의 경우 : 파일 객체가 반복 가능한 객체이기 때문에, 파일의 readlines 메소드를 호출 할 필요가 없습니다

with open('filefoo') as file_a: 
    with open('filebar') as file_b: 
     for line in file_a: 
      etc. 
1

전에 entries_from_a에서 아무것도 얻지 않는 이유를의 QApplication을 구성해야합니다. 그리고 귀하의 모든 searchable_strings은 1 문자 이상입니다.

echo "aaa\nbbb\n\ccc" > foo.txt 

>>> with open('foo.txt') as f: 
... my_data = f.read() 
... 
>>> for i in my_data: 
... print i 
... 
a 
a 
a 
\ 
n 
b 
# and so on 

그래서 당신이 아마 찾고있는 것은 각 행을 반복하는 방법은 다음과 같습니다

은 예입니다.

0

.

with open(unicode (QFileDialog.getOpenFileName())) as f: 
    readlines_a = [line for line in f] 

print readlines_a