2010-07-25 1 views
2

다음은 제 목표에 대한 간략한 요약입니다. 기본적으로 이름 또는 식별자 인 데이터 텍스트 파일에 데이터 목록이 있습니다. 이름 목록은 모두 한 행에 있으며 공백으로 구분됩니다. 각 데이터를 개별 라인으로 만들고 싶습니다. 이 데이터는 식별자입니다. 예를 들어 큰 파일에있는 원래 데이터 텍스트 파일의 이름 중 하나 인 경우 큰 파일에 해당 데이터 행 (예 : 작은 데이터 파일에 동일한 줄에 이름과 일부 추가 정보가 모두 있음)을 갖길 원합니다.AttributeError : file2의 file1에서 문자열 식별자 목록을 찾습니다.

이 프로그램은 내가 그런 위업을 시도하기 시작했습니다. 아마 이것은 나의 기술의 한계를 밀고있다. 그러나 나는 이것을 끝낼 수 있기를 바란다. 나는 매우 thourough 수 있으며, 여러분의 의견을 기대하는 것을 시도했다

Traceback (most recent call last): 
    File "C:/program3.py", line 7, in <module> 
    line_list = line.split(" ") 
AttributeError: 'list' object has no attribute 'split' 

: 내가 파이썬에서 프로그램을 실행할 때 다음

datafile = open ('C:\\datatext.txt', 'r') 

line = [item for item in open('C:\\datatext.txt', 'r').read().split(' ') 
        if item.startswith("name") or item.startswith("name2")] 

line_list = line.split(" ") 

completedataset = open('C:\\bigfile.txt', 'r') 
smallerdataset = open('C:\\smallerdataset.txt', 'w') 

trials = [ line_list ] 


for line in completedataset: 
    for t in trials: 
     if t in line: 
      smallerdataset.write(line) 

completedataset.close() 
smallerdataset.close() 

내가받은 오류입니다. 추가 질문이 있으면 필요한 경우 즉시 작성하겠습니다. 가장 좋은 모든 것을 즐기고 비오는 날씨를 즐기십시오.

편집 :

나는 제안 사항에 따라 프로그램을 약간 변경했다. 나는 지금 내 프로그램으로이 있습니다

with open('C:\\datatext.txt', 'r') as datafile: 
    lines = datafile.read().split(' ') 
matchedLines = [item for item in lines if item.startswith("name1") or item.startswith("othername")] 


completedataset = open('C:\\bigfile.txt', 'r') 
smallerdataset = open('C:\\smallerdataset.txt', 'w') 

trials = [ matchedLines ] 


for line in completedataset: 
    for t in trials: 
     if t in line: 
      smallerdataset.write(line) 

completedataset.close() 
smallerdataset.close() 

그리고 난 지금이 ​​오류를 받고 있어요 :이 문제에 도움을 계속하고 대한

 
Traceback (most recent call last): 
    File "C:/program5.py", line 17, in 
    if t in line: 
TypeError: 'in ' requires string as left operand, not list 
>>> 

감사합니다.

편집 2 : 나는 몇 가지 변경 한 지금은이 오류 받고 있어요

: 지금의 약자로 여기

 
Traceback (most recent call last): 
    File "C:/program6.py", line 9, in 
    open('C:\\smallerdataset.txt', 'w')) as (completedataset, smallerdataset): 
AttributeError: 'tuple' object has no attribute '__exit__' 

내 프로그램입니다 :

with open('C:\\datatext.txt', 'r') as datafile: 
    lines = datafile.read().split(' ') 
matchedLines = [item for item in lines if item.startswith("nam1") or item.startswith("ndname")] 


with (open('C:\\bigfile.txt', 'r'), 
     open('C:\\smallerdataset.txt', 'w')) as (completedataset, smallerdataset): 
    for line in completedataset: 
    for t in matchedLines: 
     if t in line: 
     smallerdataset.write(line) 

completedataset.close() 
smallerdataset.close() 

어떻게 나는이 장애물을 피해 가야합니까?

+0

. 'name2'로 시작하면, 항상 * name *으로 시작되기 때문에 코드의 일부는 결코 호출되지 않습니다. – Daenyth

+0

'item.startswith ('name')'이'True'이면 두 번째 조건은 체크되지 않고'False'라면 두 번째 조건은 항상'False'라는 것을 알고 있습니다. 게다가'startswith'는 검사 할 줄의 튜플을 받아들입니다. – SilentGhost

+0

Name1과 2는 방금 질문을 변경 한 임시 이름입니다. 개인 정보이므로 질문을 할 때 실제 이름을 사용하고 싶지 않습니다. –

답변

2
line = [item for item in open('C:\chiptext.txt', 'r').read().split(' ') 
      if item.startswith("SNP") or item.startswith("AFFY")] 

이것은 줄의 목록을 문자열로 만들고 있습니다. 목록 개체에는 분할 메서드가 없습니다.

datatext의 모든 이름 목록과 일부 술어와 일치하는 이름의 해당 목록의 하위 집합이 필요합니다. 가장 좋은 방법은 다음과 같습니다.

with open('C:\\datatext.txt', 'r') as datafile: 
    lines = datafile.read().split(' ') 
matchedLines = [item for item in lines if (PREDICATE)] 

일반적인 주석으로는 한 줄짜리 코드를 사용하지 마십시오. 목록 이해력 줄이 파일 객체를 열어두고 있습니다.

새 편집 용 편집 : matchedLines은 이미 목록이므로 trials을 만들 때 다른 목록에 배치하는 이유가 확실하지 않습니다. 아래는 당신이하는 일의 간단한 예입니다. 당신이 값이 정확한지 확인 할 수 있습니다

l = [1,2,3] 
ll = [l] 
print ll //[[1, 2, 3]] 

당신은 당신이 될 수있는 변수의 값을 기대하는 것을 기반으로 이해가되지 않는 오류가 발생할 수

, 당신은 인쇄 문에 추가해야합니다.

이것은 당신이 필요 가능성이 높습니다 : 당신은 두 번째`item.startswith` 전화를 제거 할 수 있습니다

with open('C:\datatext.txt', 'r') as datafile: 
    lines = datafile.read().split(' ') 
matchedLines = [item for item in lines if item.startswith("name1") or item.startswith("othername")] 

with open('C:\bigfile.txt', 'r') as completedataset: 
    with open('C:\smallerdataset.txt', 'w') as smallerdataset: 
    for line in completedataset: 
     for t in matchedLines: 
     if t in line: 
      smallerdataset.write(line) 
+0

실수를 지적 해 주셔서 감사합니다. 가장 좋은 방법은 무엇입니까? –

+0

몇 가지 샘플 코드가 추가되었습니다. 이 대답으로 문제가 해결되면 그것을 수락하는 것을 잊지 마십시오. – unholysampler

+0

아직 문제가 있습니다. 이 코딩 라인의 문제점을 반영하기 위해 편집 한 원본 게시물을 참조하십시오. 감사. –

관련 문제