Python 将csv文件读入列表,并将字符串转换为整数

Python 将csv文件读入列表,并将字符串转换为整数,python,list,csv,Python,List,Csv,我试图读取CSV文件,然后将所有数据返回到列表中。我首先尝试使用csv.reader读取csv文件,方法是使用以下代码: import csv with open(fileName, 'r') as f: next(f) data = csv.reader(f) dataList = list(data) 我现在有一个列表,看起来像: [['123', '234', '456', '567'] ['345', '3456', '5678', '678'] ['23

我试图读取CSV文件,然后将所有数据返回到列表中。我首先尝试使用
csv.reader
读取csv文件,方法是使用以下代码:

import csv
with open(fileName, 'r') as f:
    next(f)
    data = csv.reader(f)
    dataList = list(data)   
我现在有一个列表,看起来像:

[['123', '234', '456', '567']
['345', '3456', '5678', '678']
['2345', '4567', '45678', '56789']
...]
我注意到这些数字在列表中存储为字符串,因此我通过
newList=[int(I)for I in dataList]
创建了一个新列表,并收到了此错误消息
TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“list”

因此,我尝试了在Youtube上看到的以下代码:

with open('fileName', 'r') as f:
    next(f)
    data = csv.reader(f)
    data_lst = []
    for line in reader:
        data_lst.append([int(line)])
我得到这个错误信息:

ValueError                                Traceback (most recent call last)
<ipython-input-123-9fbefdb892ab> in <module>
      3     data = csv.reader(f)
      4     data_lst = []
----> 5     for line in reader:
      6         data_lst.append([int(line)])

ValueError: readline of closed file


我需要读取这个csv文件并将数据存储在一个列表中,这样csv文件中的每一行都是一个类似于
[[123,456,567,5678],[4567,3456,6789,2345]…]

的列表,因为python3正在读取和写入二进制文件。因此,您可以将字节数据转换为字符串并继续,也可以使用pandas读取数据,这些数据主要以整数形式读取数字

import pandas as pd

df = pd.read_csv("filename")

rows = df.values.tolist()
Pandas使您可以更自由地对行执行操作。您还可以使用下面的方法将列的数据类型转换为int

df[column_name]=df[column_name].astype(int)


这是因为你在另一个列表中有一个列表。 就像你告诉我们的:

dataList = [['123', '234', '456', '567'],['345', '3456', '5678', '678'],['2345', '4567', '45678', '56789']]
在代码中,您正在迭代内部列表,因此只需要迭代内部列表中的字符串。 像这样:

int_list = []
    for inner_list in dataList:
        for string in inner_list:
            int_list.append(int(string))
或者,对于单行:

int_list = [int(string) for inner_list in dataList for string in inner_list]
其输出如下所示:

[123, 234, 456, 567, 345, 3456, 5678, 678, 2345, 4567, 45678, 56789]
@编辑

如果您想要一个值列表作为输入,下面的代码将起作用

outer_out_list = []
for inner_list in dataList:
    innet_out_list = []
    for string in inner_list:
        innet_out_list.append(int(string))
    outer_out_list.append(innet_out_list)
输出:

[[123, 234, 456, 567], [345, 3456, 5678, 678], [2345, 4567, 45678, 56789]]

@brunoto提供的答案是正确的,我更喜欢这个解决方案(更接近您的):


请注意,所需要做的只是更改最后一行,在每一行的元素上循环,并将它们分别转换为
int
,而不是试图将整行(一条记录,即
list
)转换为单个
int

。问题似乎是您有一个嵌套列表,请执行:
[[int(i)对于l中的i]对于数据列表中的l]
这实际上不是真的-使用
open()
,Python以文本模式打开文件,因此读取是可以的。OP的错误实际上是正确访问列表。
[[123, 234, 456, 567], [345, 3456, 5678, 678], [2345, 4567, 45678, 56789]]
with open('fileName', 'r') as f:
    next(f)
    data = csv.reader(f)
    data_lst = []
    for line in reader:
        data_lst.append([int(x) for x in line])