0
my_list = []
with open(home + "/Documents/stocks/" + filePath , newline='') as f:
    array1 = (line.split(',') for line in f.readlines())
    last_col = [line.split(',')[-1] for line in f]
    for line in array1:          
        my_list.append(line[-1])

这可行,但 my_list\n在每行的末尾都有。我怎样才能删除它。删除后如何将其转换为整数列表?我试过做类似的事情

list(map(int, my_list))

但由于新行,我得到一个错误。

ValueError: invalid literal for int() with base 10: 'Adj Close\n'
4

3 回答 3

0

您现有的代码适用于您正在尝试做的事情。

为了使其独立,我将文件作为 . 移到程序中StringIO,否则,这是您的代码,逐字逐句:

import io

f = io.StringIO('''1, 2, 3
4, 5, 6
''')

my_list = []
array1 = (line.split(',') for line in f.readlines())
last_col = [line.split(',')[-1] for line in f]
for line in array1:          
    my_list.append(line[-1])

print(list(map(int, my_list)))

这就是它的作用:

[3, 6]

这正是你想要的,对吧?

所以,如果它不起作用,那不是因为换行;这是因为别的东西。而且,由于您从未告诉我们错误是什么,或者除了“由于新行而导致错误”之外的任何其他内容,因此没有人可能猜出其他可能是什么。也许你有一个3.6在那里,你得到ValueError: invalid literal for int() with base 10: '3.6'. 也许您在指定路径没有文件,并且您收到FileNotFoundError错误消息。也许您忘记了 shebang,而您正在使用 Python 2 解释器或 bash 运行 Python 3.x 脚本。根据您告诉我们的情况,一切皆有可能。

于 2013-02-05T02:44:07.237 回答
0

看起来您只想将最后一列作为整数列表。那是对的吗?如果是这样:

with open(datafile) as fin:
    last_column = [ int(line.split(',')[-1]) for line in fin ]

应该做的伎俩...

如果您希望每一行作为整数列表:

with open(datafile) as fin:
    rows = [ [int(x) for x in line.split(',')] for line in fin ]
    #same as
    #rows = [ list(map(int,line.split(','))) for line in fin ] #if you prefer ...

请注意,在 python 中,int将愉快地转换带有任何空格的字符串:

>>> print(int('\t\n300\n'))
300

所以换行符不是问题......(使用python3.2和python2.7测试)

于 2013-02-05T02:25:16.033 回答
0

如果你想解析 CSV 文件,你不想处理所有复杂的情况,比如最后一列中的换行符、逗号周围的空格等。只需使用csvPython 附带的模块:

my_list = []
with open(home + "/Documents/stocks/" + filePath) as f:
    for row in csv.reader(f):
        numbers = list(map(int, row))
        my_list.append(line[-1])

或者,可能更简单:

with open(home + "/Documents/stocks/" + filePath) as f:
    my_list = [list(map(int, row)) for row in csv.reader(f)]

将列表推导和 a 混合map到一行对我来说有点令人惊讶,但在这种情况下,我认为它看起来比纯推导替代方案要好一些:

with open(home + "/Documents/stocks/" + filePath) as f:
    my_list = [[int(col) for col in row] for row in csv.reader(f)]

并且比纯功能替代方案要好得多:

my_list = list(map(compose(list, partial(map, int)), 
                   csv.reader(iterwith(open(home + "/Documents/stocks/" + filePath)))))
于 2013-02-05T02:28:40.543 回答