import csv
filename = str(input("Give the file name: "))
file = open(filename, "r")
with file as f:
size = sum(1 for _ in f)
print("File", filename, "has been read, and it has", size, "lines.", size - 1, "rows has been analyzed.")
我几乎键入了csv文件路径,以对其进行分析并执行其他操作。
第一个问题是:如何从CSV文件中打印确切的单元格?我尝试了不同的方法,但似乎无法正常工作。
例如,我要打印这两个单元格的信息
另一个问题是:我可以自动打印第一个单元格(1 A)和最后一行的第一个单元格(1099 A),而无需键入单元格位置吗?
谢谢
数据的小部分
数据示例:
Time Solar Carport Solar Fixed SolarFlatroof Solar Single
1.1.2016 317 1715 6548 2131
2.1.2016 6443 1223 1213 23121
3.1.2016 0 12213 0 122
答案 0 :(得分:0)
您在最顶部导入了csv
,但随后决定不使用它。我想知道为什么–似乎您只是需要这里的东西。因此,在简短浏览the official documentation之后,我得到了:
import csv
data = []
with open('../Downloads/htviope2016.csv') as csvfile:
spamreader = csv.reader(csvfile, delimiter=';')
for row in spamreader:
data.append (row)
print("File has been read, and it has ", len(data), " lines.")
这就是您需要阅读整个文件的全部。您不需要-对于某些操作,一次只处理一行就足够了-但是在加载了全部数据并准备好内存后,您就可以使用它。
print (f'First row length: {len(data[0])}')
每行的单元格数。请注意,第一行包含标题,您可能没有任何用处。让我们抛弃它。
print ('Discarding 1st row NOW. Please wait.')
data.pop(0)
完成。普通的pop()
会删除最后一项,但您也可以使用索引。或者,您可以使用更多的pythonic语言(因为“切片”)data = data[1:]
,但我认为这可能涉及复制和移动大量数据。
print ('First 10 rows are ...')
for i in range(10):
print ('\t'.join(data[i])+'(end)')
看,内存中有数据!由于以下原因,我粘贴了(end)
:
print (f'First row, first cell contains "{data[0][0]}"')
print (f'First row, last cell contains "{data[0][-1]}"')
其中显示
First row, first cell contains "2016-01-01 00:00:00"
First row, last cell contains ""
因为每行以;
结尾。可以在读取过程中(理想情况下)或之后(因为我们仍将其保留在内存中)平移此空的“单元格”:
data = [row[:-1] for row in data]
然后您得到
First row, last cell contains "0"
现在您可以使用data[row][column]
来寻址所需的任何单元格(当然,仅在有效范围内)。
免责声明:这是我对csv
模块的第一次了解。某些操作可能会更有效地完成。实际上,the official documentation中的所有示例 verbatim 都证明,首先在这里首先值得一看。