[英]How to read integers from text file and put them in a list in python?
[英]How to read list of integers from a csv file into python without converting them to strings?
我有一个整数列表保存在 csv 工作表中,行的长度并不相同。 像下面的例子:
22,-14,-24,2,-26,18,20,-4,12,16,8,-6,-10
20,12,-16,18,28,24,4,-22,26,8,-10,-14,2,6
10,-26,-20,30,24,-22,18,-28,12,14,-6,-2,8,-16,-4
16, 22, 30, -18, -26, -28, 24, -8, 32, -14, 12, 4, 20, -10, 2, 6
32, 10, -14, 20, -22, 24, -4, -26, 34, 28, -30, 2, 12, 18, 6, -8, 16
8, -20, 34, 18, 30, 24, -4, 6, 28, -32, -12, -36, 10, 16, -38, 2, 14, -22, -26
我需要调用 function,其中输入是一个由这样的行组成的数组。 所以我需要以下内容。
input = [22,-14,-24,2,-26,18,20,-4,12,16,8,-6,-10]
使用标准方法
import csv
with open(file.csv, 'r') as f:
reader = csv.reader(f)
for line in reader:
print(line)
产生 output
['22', '-14', '-24', '2', '-26', '18', '20', '-4', '12', '16', '8', '-6', '-10']
我不能使用,因为元素不是整数。 我尝试使用不同的格式化参数,例如csv.QUOTE_NONE
但没有任何效果。 据我所知,这是有道理的,因为 csv 文件不知道 integer 数据类型。
我的文件有 100'000-1'000'000 行,因此任何解决方案都必须高效。 由于列数不固定,我也无法手动投射,我无法弄清楚如何遍历一行的列。 有谁知道我该如何解决这个问题? 我不知道它是否有帮助,但我不受 csv 文件的约束,我可能可以使用其他东西。
您可以将它们转换为 int:
elems = ['22', '-14', '-24', '2', '-26', '18', '20', '-4', '12', '16', '8', '-6', '-10']
elems = [int(i) for i in elems]
Output: [22, -14, -24, 2, -26, 18, 20, -4, 12, 16, 8, -6, -10]
更好地处理 csv,你也可以使用 Pandas:
import pandas as pd
df = pd.read_csv('line.csv', header=None, sep = ';')
df = df.T
for row, col in df.iteritems():
line = list(df[row].dropna())
print(line)
output 是:
[22.0, -14.0, -24.0, 2.0, -26.0, 18.0, 20.0, -4.0, 12.0, 16.0, 8.0, -6.0, -10.0]
[20.0, 12.0, -16.0, 18.0, 28.0, 24.0, 4.0, -22.0, 26.0, 8.0, -10.0, -14.0, 2.0, 6.0]
[10.0, -26.0, -20.0, 30.0, 24.0, -22.0, 18.0, -28.0, 12.0, 14.0, -6.0, -2.0, 8.0, -16.0, -4.0]
[16.0, 22.0, 30.0, -18.0, -26.0, -28.0, 24.0, -8.0, 32.0, -14.0, 12.0, 4.0, 20.0, -10.0, 2.0, 6.0]
[32.0, 10.0, -14.0, 20.0, -22.0, 24.0, -4.0, -26.0, 34.0, 28.0, -30.0, 2.0, 12.0, 18.0, 6.0, -8.0, 16.0]
[8.0, -20.0, 34.0, 18.0, 30.0, 24.0, -4.0, 6.0, 28.0, -32.0, -12.0, -36.0, 10.0, 16.0, -38.0, 2.0, 14.0, -22.0, -26.0]
由于您的 CSV 没有任何列名,因此您实际上不需要csv模块(更不用说pandas 了)。 你可以这样做:
FILENAME = 'file.csv'
def parse(filename):
with open(filename) as data:
for line in data:
yield list(map(int, line.split(',')))
for line in parse(FILENAME):
print(line)
Output:
[22, -14, -24, 2, -26, 18, 20, -4, 12, 16, 8, -6, -10]
[20, 12, -16, 18, 28, 24, 4, -22, 26, 8, -10, -14, 2, 6]
[10, -26, -20, 30, 24, -22, 18, -28, 12, 14, -6, -2, 8, -16, -4]
[16, 22, 30, -18, -26, -28, 24, -8, 32, -14, 12, 4, 20, -10, 2, 6]
[32, 10, -14, 20, -22, 24, -4, -26, 34, 28, -30, 2, 12, 18, 6, -8, 16]
[8, -20, 34, 18, 30, 24, -4, 6, 28, -32, -12, -36, 10, 16, -38, 2, 14, -22, -26]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.