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'
答案 0 :(得分: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测试)
答案 1 :(得分:0)
如果你想解析CSV文件,你不希望必须处理所有繁琐的情况,例如最后一列中的换行符,逗号周围的空格等。只需使用后来的csv
模块用Python:
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)]
将列表理解和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)))))
答案 2 :(得分: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脚本。根据你告诉我们的内容,一切皆有可能。