2010-06-25 1 views
7

Для входного файла отдельного от пространства/вкладки, как:Python, как читать и разбить строку на несколько целых

1 2 3 
4 5 6 
7 8 9 

Как читать строки и разделить целые числа, а затем сохранить в либо списки или кортежи? Благодарю.

data = [[1,2,3], [4,5,6], [7,8,9]] 
data = [(1,2,3), (4,5,6), (7,8,9)] 

ответ

11

Один из способов сделать это, предполагая, что подсписки находятся на отдельных линиях:

with open("filename.txt", 'r') as f: 
    data = [map(int, line.split()) for line in f] 

Обратите внимание, что with заявления не стало официальным до Python 2.6. Если вы используете более раннюю версию, вам нужно сделать

from __future__ import with_statement 
+0

+1 это ближе всего к тому, как я это сделал, и я считаю лучшим примером «лучших практик» (что бы это ни значило) из 5 ответов здесь. –

2

кортежи = [кортеж (Int (s) для S в line.split()) для линии в открытом ("file.txt") .readlines()]

Мне нравится Jeff's map(int, line.split()), а не внутренний генератор.

+0

Этот способ действительно хранит расщепленную строку в кортеж? Не могли бы вы объяснить немного больше? Благодарю. – Stan

+1

На самом деле это даст вам список списков, а не список кортежей (потому что 'str.split' возвращает список). В основном то, что он делает, это открыть файл, прочитать в его строках, а затем перебирать их ('tup in ...') и разбивать каждый на пробел. –

+0

Итак, как хранить в кортеже? Это часть моего первоначального вопроса. Благодарю. – Stan

1

Вы имеете в виду, вот так?

обновление

Просто преобразовать каждую строку в Int

string = """1 2 3 
4 5 6 
7 8 9""" 

data = [] 
for line in string.split("\n"): #split by new line 
    data.append(map(int, line.split(" "))) # split by spaces and add 

print(data) 

Выход:

[[ '1', '2', '3'], [» 4 ',' 5 ',' 6 '], [' 7 ',' 8 ',' 9 ']]

[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

Da daaaa !!!

+0

nope, я хочу сохранить целое число в моем списке, а не в строке. – Stan

+0

И вы можете понять из моего примера? ... это легко ... – OscarRyz

+0

В конечном итоге я использую функцию сопоставления. Все еще не определил другой способ преобразовать все прочитанные строки в целое число. – Stan

1
def getInts(ln): 
    return [int(word) for word in ln.split()] 

f = open('myfile.dat') 
dat = [getInts(ln) for ln in f] 
3

Если вы обнаружите, что имеете дело с матрицами или таблицами чисел, могу ли я предложить пакет numpy?

import numpy as np 
data = np.loadtxt(input_filename) 
Смежные вопросы