Python получает точную ячейку из CSV-файла - PullRequest
0 голосов
/ 15 ноября 2018
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 А) и самой последней строки первой строки (1099 А), без необходимости ввода местоположения ячейки?

Спасибо

Небольшая часть данных

Пример данных:

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 голосов
/ 16 ноября 2018

Вы импортируете csv в самом верху, но затем решили не использовать его. Интересно, почему - кажется, просто , что вам нужно здесь. Итак, после краткого взгляда на официальную документацию , я получил это:

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() удаляет последний элемент, но вы также можете использовать индекс. В качестве альтернативы, вы можете использовать более питонический (потому что «нарезка») 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. Некоторые операции могут быть выполнены более эффективно. Практически все примеры дословно из официальной документации , которая доказывает, что всегда стоит взглянуть туда сначала .

...