我正在尝试读取csv文件中的一行数字,然后单独调用它们来计算它们。到目前为止,这是我的代码:
import sys
import os
import csv
import numpy as np
with open('data.csv') as csv_file:
csv_reader = csv.reader(csv_file)
for line in csv_reader:
x = np.array(line[3])
print(x)
在csv文件的这一行中,我需要在计算中使用像4.65这样的小数。我尝试过这样的事情:
print(5 + x[14])
但它不起作用。
我认为我需要将该行转换为整数列表或其他内容,请帮忙。
提前谢谢。
答案 0 :(得分:1)
根据您的示例行,您要将delimiter=' '
添加到csv.reader()
csv_data = csv.reader(csv_file, delimiter=' ')
猜测csv
的结构,但假设它不包含标题而你想保留小数:
with open('new_data.txt') as csv_file:
csv_data = csv.reader(csv_file, delimiter=' ')
for line in csv_data:
x = [float(n) for n in line.split(',')]
print(x)
如果您有字符串值,例如'A string'
答案 1 :(得分:1)
以下是使用map
的@ GiantsLoveDeathMetal解决方案的替代方法(它还显示了一种向我们提供包含csv文件样本io.StringIO
的复制/粘贴代码的方法):
编辑StringIO
以包含列中的数据和空行
import csv
import io
f = io.StringIO("""
7.057
7.029
5.843
5.557
4.186
4.1
2.286""")
csv_reader = csv.reader(f, delimiter=' ')
for line in csv_reader:
line = list(map(float, filter(None, line)))
print(line)
在python 2中(在某些情况下在python 3中,如果你的代码使用生成器,在本例中不是这种情况),你不需要将map
的结果转换为列表
所以line = list(map(float, line))
可以被更清晰的map(float, line)
取代。哪个可以被认为比列表理解(或生成器表达式)更清晰,更明确。
例如,这将起作用:
import csv
import io
f = io.StringIO("""7.057 7.029 5.843 5.557 4.186 4.1 2.286""")
csv_reader = csv.reader(f, delimiter=' ')
for line in csv_reader:
line = map(float, line)
print(sum(line))
# 36.05800000000001
如果您对map
vs列表理解辩论感兴趣,here you go for more details。
答案 2 :(得分:0)
是的,确实是Unatiel。
抱歉,不得不为我自己的问题创建答案,显然