2015-01-27 5 views
1

Я чтение из файла, содержащего 100000 номеров (1 в каждой строке) с помощью:Чтение целых чисел из файла в Python

var_array = [] 

with open("IntegerArray.txt", "r") as my_file: 
    for line in my_file: 
     var_array += line.strip().split('\n') 

print(var_array) 

Это возвращает массив строк, но мне нужно, чтобы преобразовать их в целые , Я пытался использовать:

var_array += int(line.strip().split('\n')) 

Но это бросает ошибку «TypeError: Int() аргумент должен быть строкой или числом, а не" список».

Я также попытался использовать карту:

var_array.append(map(int,line.strip().split('\n'))) 

Но печать показывает это (88>,, ...)

Спасибо за любые посоветуйте.

ответ

1

вам не нужно разделить здесь:

var_array.append(int(line.strip())) 

полоса и раскол:

>>> "hello,world".split(',') #split the string on delimiter 
['hello', 'world'] 
>>> " hello,world \r\n".strip() #removes whitespace from the both end 
'hello,world' 
1

Проблема заключается в split('\n') вызова функции, которая преобразует строку в список лексем, разделенных \n характера (которые не должны существовать в строке, так как вы делаете strip()). Удалите этот вызов и заверните вызов line.strip() с помощью int(), и все должно быть в порядке.

Вот обновленная версия:

var_array = [] 

with open("IntegerArray.txt", "r") as my_file: 
    for line in my_file: 
     var_array.append(int(line.strip())) 

print(var_array) 
+0

первые номера файла (54044, 14108, 79294). Когда я удалял .split ('\ n') -> (var_array + = line.strip()) возвращает ('2', '6', '3', '7', '5', '1', ' 8 ',' 6 ',' 0 ',' 1 ',' 6 ',' 3 ',' 8 ',' 3 ',' 4 ',' 3 ',' 9 ',' 7 ',' 0 ' , '8', '9', '4', '6', '4', '2', '4', '0', '3', '6', '5', '5',. ..). И да, есть одно число в строке, я просто перечислил их запятыми. – Or10n

+0

вместо var_array + = do var_array.append (line.strip()) –

+0

var_array.append (line.strip()) возвращает массив как массив строк. – Or10n

1

Если у вас есть Панда установлена, то проще работать с:

>>> import pandas as pd 
>>> pd.read_csv('IntegerArray.txt', header=None) 
    0 
0 1 
1 3 
2 4 
3 5 

Если вы хотите как встроенные типы данных:

>>> list(pd.read_csv('IntegerArray.txt', header=None).values[:,0]) 
[1, 3, 4, 5] 
1

Вы должны разделить на ограничителе не символ новой строки:

var_array += map(int, line.strip().split()) 

Если они разделены пустыми промежутками только расколоть, если каждое число отделено , использования split(",") и т.д ..

Если они все на отдельных линиях просто использовать список комп и брошено как межд:

with open("IntegerArray.txt") as my_file: 
     var_array = [int(line.rstrip()) for line in my_file] 
Смежные вопросы