2014-02-08 3 views
1

У меня есть простой текстовый файл с двумя столбцами. Пример строки: 'J0005-28' 14719.0 Я хочу, чтобы строка за строкой включала первую запись как текст, а вторую как число, поэтому я могу установить переменные типа name = 'J0005-28' и value = 14719.0Python: чтение смешанных данных из текстового файла

Есть ли простой способ сделать это в Python без использования Regex или других сложных процессов синтаксического анализа?

ответ

1

Для этого вам необходимо знать структуру строк в файле. Как поля, которые вы хотите разделить, разделены в файле. В вашем примере, если вы уверены, что поля разделены пробелами, вы можете использовать модуль csv python и установить разделитель в пространство и проанализировать строки.

Пример кода:

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 («любой разделитель '). a.split (' | ') – darkryder

+0

Фактически, если вы уверены, что будет какой-то фиксированный разделитель, вы всегда можете использовать csv и правильно установить флаг разделителя функции считывателя. Считыватель csv автоматически разбивается на основе разделитель и заполняет его как список. – shaktimaan

+0

ahh хорошо, я немного новичок, так что медведь со мной, но разве это не то, что split() тоже делает ... ?? – darkryder

Смежные вопросы