Одновременное удаление пустых строк и строк с текстом в них

#python #csv #rows

#python #csv #строки

Вопрос:

Новичок в программировании здесь. Пройдя через Google и форумы (а также много проб и ошибок), я не смог найти аккуратного решения своей проблемы.

Я хотел бы удалить несколько начальных строк (первые 10 строк) в моей электронной таблице / файле CSV, и пока я нашел решение для этого, используя:

     all(next(read) for i in range(10))
  

Похоже, что он не может удалить пустые строки в файле CSV, который у меня есть. Первые 10 строк, которые я хотел бы удалить, включают эти пустые строки. Я думаю, что приведенная выше строка удаляет строки, только если в них есть строки.

Мой полный код пока таков [EDIT1]: Может быть, это могло бы сработать?

     import csv
    with open('filename.csv') as csvfile:
       non_blank_row=[]
       filecsv = csv.reader(csvfile, delimiter=",")
       for row in filecsv:
              non_blank_row.append(row)

       better_blank_row = non_blank_row[[i for i in range(len(non_blank_row)) if non_blank_row!=[]
  

[ПРАВКА2]: Когда я попытался напечатать (better_blank_row), я сделал:

     for i in better_blank_row:
        print(better_blank_row)
  

Однако я не уверен, почему вывод не выводится .. как будто оболочка просто зависает.
Любая помощь была бы высоко оценена!

Ответ №1:

Ваш цикл for просто повторяет filecsv. Это ничего не делает. Вы хотите что-то вроде

non_blank_rows = []
for row in filecsv:
if row: # empty strings are false-y
non_blank_rows.append(row)

Теперь на этом этапе вы могли бы просто установить filecsv в значение non_blank_rows. Обратите внимание, что более питоническим способом сделать все это, вероятно, было бы использовать понимание списка. Я бы написал синтаксис для этого, но если это то, о чем вы не слышали, возможно, вы захотите посмотреть их самостоятельно.

filecsv = [row for row in filecsv if row]

Комментарии:

1. Спасибо за ответ.

2. Мне было интересно, будет ли это лучше: с open(‘filename.csv’) как csv-файл non_blank_rows=[] filecsv = csv.reader(csv-файл, разделитель =»,») для строки в filecsv: non_blank_rows.append(строка) Затем, возможно, для удаления пустых строк: better_rows=non_blank_rows[[i для i в диапазоне (len( non_blank_row) если non_blank_row[i]!=[] или что-то в этом роде?

Ответ №2:

вы можете использовать как резерв для записи нового CSV-файла после удаления конкретной строки

 import csv
#read csv file
csvfile =  open('/home/17082016_ExpiryReport.csv', 'rb')
filecsv = csv.reader(csvfile, delimiter=",")

#following line increment pointer for blank line also up to range 10 lines  
[next(filecsv) for i in range(10)]

#write csv file
with open('/home/17082016_ExpiryReport_output.csv', 'wb') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=',')
    [csvwriter.writerow(i) for i in filecsv ]