Python删除'\n';从列表,然后将列表中的字符串转换为整数

Python删除'\n';从列表,然后将列表中的字符串转换为整数,python,arrays,list,python-3.x,integer,Python,Arrays,List,Python 3.x,Integer,这是可行的,但我的列表在每行末尾都有\n。我怎样才能删除它。删除后,如何将其转换为整数列表? 我试过做类似的事情 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]

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

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])
但是由于新行的原因,我得到了一个错误

list(map(int, my_list))

看起来您只需要最后一列作为整数列表。对吗?如果是:

ValueError: invalid literal for int() with base 10: 'Adj Close\n'
我应该做这个把戏

如果要将每行作为整数列表,请执行以下操作:

with open(datafile) as fin:
    last_column = [ int(line.split(',')[-1]) for line in fin ]
请注意,在python中,
int
很乐意转换带有任何空格的字符串:

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 ...

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

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

>>> print(int('\t\n300\n'))
300
或者,可能更简单地说:

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)]
with open(home + "/Documents/stocks/" + filePath) as f:
    my_list = [[int(col) for col in row] for row in csv.reader(f)]
而且比纯功能替代品要好得多:

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

您现有的代码可以很好地完成您要做的事情

为了使其独立,我将该文件作为
StringIO
移动到程序中,但除此之外,这是您的代码,逐字逐句:

my_list = list(map(compose(list, partial(map, int)), 
                   csv.reader(iterwith(open(home + "/Documents/stocks/" + filePath)))))
它的作用如下:

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
,并且您得到了
ValueError:invalid literal for int(),以10为基数:“3.6”
。可能您在指定的路径上没有文件,并且您得到了一个
FileNotFoundError
错误。也许您忘记了一个shebang,而您正在使用Python2解释器或bash运行Python3.x脚本。根据您告诉我们的,任何事情都有可能。

str.rstrip
`str.strip`这样的东西可以工作吗?看起来很像您试图手工编写CSV文件解析器。不要那样做;只需使用标准模块。不要只说“我得到一个错误”,请向我们展示错误(带有回溯)。并确保您发布的代码实际生成了该错误。并给我们一些(简短的)示例输入来演示错误。@user2018488——我觉得很难相信。我看不出在我上面的代码中,
会是一个
列表
类型…@mgilson:事实上,我也看不出他的原始代码会以他描述的方式失败。我怀疑他现在的输入是正确的,他的错误实际上与新行无关。@abarnert--是的。OP的原始代码有点烦人,但基本上问题是,当生成器开始迭代时,文件已经被列表理解使用了,所以没有什么可以迭代的了——我想这会让
my_list
完全空了。。。从头开始--在看到您的编辑之后,它看起来像是在创建生成器时运行的
f.readlines()
。。。唉,我希望python能一起从文件对象中删除
readlines
。@mgilson:他们确实删除了
readlines
,你只需要升级到3.x。(当然,
list(f)
f.readlines()
做的事情是一样的,而且它仍然存在……但没有人认为这是他们想要的,除非在极少数情况下,这确实是他们想要的。)@mgilson:顺便说一句,这里的棘手之处不是真正的
readlines
;即使他对流行的
array1
使用普通迭代器,
last\u col
仍然是空的,这仍然是一个危险信号(因为它从未实际使用过,所以它是空的并不重要)和一个危险信号(OP的代码可能不是他发布的)。我最好的猜测是,文件末尾有一个空行,我们没有看到的错误消息是
ValueError:invalid literal for int(),以10为基数:'\n'
,但谁能说呢?也可以是额外的
在一行的末尾或其他地方,但是猜测可能不是很有效。。