2014-02-08 4 views
1

두 개의 열이있는 간단한 텍스트 파일이 있습니다. 예 : 'J0005-28'14719.0 첫 번째 항목을 텍스트로, 두 번째 항목을 숫자로 읽고 싶으므로 name = 'J0005-28'및 value = 14719.0과 같은 변수를 설정할 수 있습니다.Python : 텍스트 파일의 혼합 데이터 읽기

Regex 또는 기타 복잡한 구문 분석 프로세스를 사용하지 않고 Python에서이 작업을 수행하는 간단한 방법이 있습니까?

답변

1

이렇게하려면 파일의 줄 구조를 알아야합니다. 파일에서 분리 된 필드는 어떻게 분리합니까? 귀하의 예제에서 필드가 공백으로 구분되어 있다고 확신하는 경우 파이썬의 csv 모듈을 사용하고 구분 기호를 공백으로 설정하고 행을 구문 분석 할 수 있습니다.

샘플 코드 :

import csv 

names = [] 
values = [] 

with open(input_file, 'r') as infile: 
    csv_reader = csv.reader(infile, delimiter=' ') 
    for line in csv_reader: 
     names.append(line[0]) 
     values.append(line[1]) 
infile.close() 
+0

1. 나는 탭 구분 기호를 사용하고 내가 사용하는 번호로 다시 두 번째 열 항목을 변환해야 2. 전화에서 설정 한 values.append (플로트 (라인 [1])). 그렇지 않으면 정상적으로 작동합니다. 거기에 genfromtxt 또는 loadtxt와 같은 단일 행 방법이있을 수 있다고 생각하고있었습니다. – dcnicholls

0

확실히 그래, 우선은 전체 라인을 읽은 후 별도로 데이터를 추출합니다. 예를 들어 :

f=open('abc.txt','r') 
while 1: 
    a=f.readline() 
    if a=='': break 
    a=a.split()     #This creates a list of the input 
    name=a[0] 
    value=int(a[1])    # or value=float(a[1]) whatever you want 
    #use the name and value howsoever 
f.close() 
+0

오, 그래, warunsl에 의해 말하듯이, 공백이 구분 기호가 아닌 경우 a.split ('구분 기호가 무엇이든간에 ') example. a.split ('| ') – darkryder

+0

실제로 고정 된 구분 기호가있을 것이라 확신하는 경우 csv를 사용하고 reader 함수의 구분 기호 플래그를 적절하게 설정할 수 있습니다 .csv 판독기는 구분 기호는 목록으로 채우고 목록으로 채 웁니다 . – shaktimaan

+0

아, 글쎄요, 저는 초보자이기 때문에 저와 함께 감내해야합니다. 그러나 split()도 그렇게하지 않습니다 ... ?? – darkryder

관련 문제