Python从csv文件获取确切的单元格

时间:2018-11-15 18:14:16

标签: python csv cell

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文件中打印确切的单元格?我尝试了不同的方法,但似乎无法正常工作。 For example I want to print the info of those two cells

例如,我要打印这两个单元格的信息

另一个问题是:我可以自动打印第一个单元格(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

1 个答案:

答案 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 都证明,首先在这里首先值得一看。