2016-08-18 2 views
0

나는이 문제에 익숙하지 않기 때문에 잘못된 곳이나 다른 곳에서이 주제를 옮기십시오.동시에 파일을 읽고 루프를 시도하는 중

문제 :(빠른 참고 :이 모든 파이썬에) 나는, 동일한 수의 열이 각각, 입력의 특정 열을이 100 정도 파일을 통과하려고 (동일 파일마다 하나씩)를 작성하고 새 파일에 기록하십시오. 그러나이 100 개의 파일이 모두 동일한 수의 행을 가지고있는 것은 아닙니다. 아래 코드에서 filec는 루프에 있으며 100 개의 파일 전체에서 계속 변경됩니다. 각 txt 파일의 행 수를보고 원하는 번호를 여러 번 반복하여 원하는 특정 열을 얻으려고합니다.

filec = open(string,'r').read().split(',') 
    x = len(filec.readlines()) 

필자는 분할 함수를 사용한 후 filec가 목록이되고 .read()를 사용했을 때 원래 문자열이라고 생각합니다. 행 수를 찾는 방법은 무엇입니까? 그래서 행 수를 반복하고 원하는 각 행의 위치를 ​​얻을 수 있습니까?

감사합니다.

+1

당신에게 줄 수를 알아야 할 필요가 없습니다. readline() :' – Julien

+0

(죄송합니다. 코드를 주석으로 쓰는 방법을 모르겠습니다.) 당신은'for line open (string, 'r')을 사용하여 직접 반복 할 수 있습니다. 아마 나는 당신의 의견을 오해하고있다. 또는 명백히 설명하지 않았다. 나의 나쁜 ... 위의 두 줄의 코드 이후에 나는 "범위 (x) a = 20i + 8 b = 20i + 9 c = 20i + 9 "여기서 filec [a], filec [b], filec [c]는 내가 원하는 각 행의 값입니다. 죄송합니다 여기에 코드를 작성할 수 없기 때문에 새로운 것입니다 :( –

+0

@JulienBernu : ['readlines()'] 필요 없음 (https://docs.python.org/3/library/io.html#io .IOBase.readlines) : "'file.readlines()'를 호출하지 않고'for line in file : ...'을 사용하여 파일 객체를 반복 할 수 있음에 유의하십시오."[enumerate (opened_file, start = 1)'] (https://docs.python.org/3/library/functions.html#enumerate) –

답변

0

당신은 이런 식으로 그것을 할 수 : 오류가 있는지

filec = open (filename, 'r') 
lines = filec.readlines() 

for line in lines: 
    words = line.split(',') 
    # Your code here 

실례합니다, 나는이 모바일에이 일을 해요. 이것에 대해 다음 방법

+0

정말 고마워! 내가 할 수 있으면 upvote 하겠지만 나는 새로운 사람이므로 평판이 15 점 미만입니다. P –

+0

당신은 upvote 수 있으며 여전히 중요합니다. 그것은 단지 투표 수에 나타나지 않을 것입니다. –

+0

오, 알았어, 그 경우 나는 내가 상상했다 :). 어쨌든 도움을 주셔서 감사합니다 –

0

방금 ​​행의 수를 찾고 있습니다으로서, -

t = tuple(open(filepath\filename.txt, 'r')) 

print len(t) 
+0

안녕하세요, 내 용서를 용서하지만 튜플은 무엇을합니까? 기본적으로 내 코드의 첫 번째 줄을 첫 줄로 바꾸고 len (t)를 사용하여 길이를 표시 하시겠습니까? –

+0

튜플이 (') 분할해야한다는 사실을 처리하는지 알 수 없습니다. 만약 그렇다면, 저를 시정하십시오! 다시 한번 감사드립니다. –

+0

@ArtificialIntelligence :'tuple'은'list'와 매우 비슷합니다. 단지'불변 '('tuple'을 수정할 수 없습니다)입니다. 각 항목을 반복하고'split()'을 사용할 수 있습니다. – Ejaz

0

내가 분명히 코드를 유지하기 위해 노력, 더 적은 선으로 할 가능성이 높다. 파일 이름 목록을 가져 와서 사전을 작성하고 원하는 열에 파일 이름을 매핑합니다 (목록으로).

def read_col_from_files(file_names, column_number): 
    ret = {} 
    for file_name in file_names: 
     with open(file_name) as fp: 
      column_for_file = [] 
      for line in fp: 
       columns = line.split('\t') 
       column_for_file.append(columns[column_number]) 
     ret[file_name] = column_for_file 
    return ret 

나는 탭 구분 열을 사용한다고 가정했습니다. 이처럼 전화 : 여기

data = read_col_from_files(["file_1.txt", "/tmp/file_t.txt"], 5) 

는 지능형리스트

def read_col_from_files(file_names, column_number): 
    ret = {} 
    for file_name in file_names: 
     with open(file_name) as fp: 
      ret[file_name] = [line.split('\t')[column_number] for line in fp] 
    return ret 

를 사용하여 코드의 합리적인 단축되고, 여기에 명령 행에서이를 수행하는 방법입니다 :

cat FILENAMES | awk '{print $3}' 
관련 문제