Python csv удаление строк

Удалить строку из огромного CSV-файла в Python

У меня есть огромный (240 МБ) CSV-файл, в котором 2 верхние строки представляют собой ненужные данные. Я хочу удалить эти ненужные данные и использовать данные, начиная с этого момента.

Я хотел бы знать, каковы наилучшие варианты. Так как это большой файл, создание его копии и редактирование заняло бы много времени. Ниже CSV, например:

 junk. . No,name,place,destination 1,abx,India,SA 
 No,name,place,destination 1,abx,India,SA 

3 ответа

Просто выбросьте эти строки.

Используйте Dictreader для разбора заголовка

import csv with open("filename") as fp: fp.readline() fp.readline() csvreader = csv.DictReader(fp, delimiter=',') for row in csvreader: #your code here 

Вы можете сделать это с хвостом довольно легко

Вы сказали, что верхние 3 строки, но пример удалил верхние 2?

Вы можете найти больше способов здесь

Из-за того, как работают файловые системы, вы не можете просто удалить строки из файла напрямую. Любой способ сделать это будет обязательно переписывать весь файл с удаленными ошибочными строками.

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

Вот генератор, который возвращает каждый элемент из итерируемого (такого как файловый объект) после того, как определенное количество элементов уже было возвращено:

def gen_after_x(iterable, x): # Python 3: yield from (item for index,item in enumerate(iterable) if index>=x) # Python 2: for index,item in enumerate(iterable): if index>=x: yield item 

Чтобы упростить ситуацию, мы создадим функцию для записи временного файла:

def write_file(fname, lines): with open(fname, 'w') as f: for line in lines: f.write(line + '\n') 

Нам также понадобится os.remove а также os.rename функции от os Модуль для удаления исходного файла и переименования временного файла. И нам понадобится copyfile от shutil сделать копию, чтобы мы могли безопасно удалить исходный файл.

Теперь, чтобы сложить все вместе:

from os import remove, rename from shutil import copyfile src_file = 'big_file' tmp_file = 'big_file_temp' skip = 2 with open(src_file) as fin: olines = gen_after_x(fin, skip) write_file(tmp_file, olines) src_file_copy = src_file + '_copy' copyfile(src_file, src_file_copy) try: remove(src_file) rename(tmp_file, src_file) remove(src_file_copy) except Exception: try: copyfile(src_file_copy, src_file) remove(src_file_copy) remove(tmp_file) except Exception: pass raise 

Однако я хотел бы отметить, что 240 МБ в наши дни не такой большой файл; Вы можете найти это быстрее сделать это обычным способом, так как это сокращает количество повторяющихся операций записи на диск:

src_file = 'big_file' tmp_file = 'big_file_temp' skip = 2 with open(src_file) as f: lines = f.readlines() for _ in range(skip): lines.pop(0) with open(tmp_file, 'w') as f: f.write('\n'.join(lines)) src_file_copy = src_file + '_copy' copyfile(src_file, src_file_copy) try: remove(src_file) rename(tmp_file, src_file) remove(src_file_copy) except Exception: try: copyfile(src_file_copy, src_file) remove(src_file_copy) remove(tmp_file) except Exception: pass raise 

. или, если вы предпочитаете более рискованный способ:

with open(src_file) as f: lines = f.readlines() for _ in range(skip): lines.pop(0) with open(src_file, 'w') as f: f.write('\n'.join(lines)) 

Источник

Как удалить строки в CSV?

Carler

мой код
6311182345a5e482023765.png
мой вывод
6311161bd4655228900382.png

Xion, ну, раз вы csv.reader используете для чтения файла, то логично в файл писать с помощью csv.writer.

Carler

with open('arm.csv', newline='') as File: with open('wdays_data.csv', mode='w') as wdays: reader = csv.reader(File) for row in reader: if row[0] in weekend_days: writer = csv.writer(wdays, delimiter=',') writer.writerows(row[0])

Carler

with open('import.csv', newline='') as source: reader = csv.DictReader(source) with open('export.csv', mode='w', encoding='utf-8-sig', newline='') as destination: writer = csv.DictWriter(destination, dialect=csv.unix_dialect, fieldnames=reader.fieldnames) writer.writeheader() writer.writerows( filter(lambda x: x.get('date') not in weekend_days, reader) )

Вопрос закрыт для ответов и комментариев

Как реализовать расчет определенных индикаторов торговли в реальном времени?

Источник

Как найти строку в CSV и удалить ее?

Мне необходимо найти строку со значением, к примеру «oops», после чего скопировать значение этой строки в переменную, а саму строку из CSV удалить. Как это можно сделать?

LazyTalent

from typing import List, Tuple import csv SOURCE_CSV = 'source.csv' SUBSTR = 'ooops' COL_WITH_VALUES = 1 def main(): data = get_data_from_file(SOURCE_CSV) filtered_data, clone_rows = data_filter(data, SUBSTR, COL_WITH_VALUES) save_data(SOURCE_CSV, filtered_data) def save_data(file_path: str, rows: List[List[str]]): with open(file_path, 'w', newline='') as f: w = csv.writer(f) w.writerows(rows) def data_filter(rows: List[List[str]], subst: str, col: int) -> Tuple[List[List[str]], List[List[str]]]: filtered_data = [] clone_rows = [] for row in data: if row[col] == subst: rows_with_subst.append(row) else: filtered_data.append(row) return filtered_data, clone_rows def get_data_from_file(file_path: str) -> List[List[str]]: with open(SOURCE_CSV, 'r') as f: data = [x for x in csv.reader(f)] return data if __name__ == "__main__": main()

sim3x

И что произойдет, когда не хватит памяти?

LazyTalent

Тогда автор вопроса прибежит сюда снова с вопросом, что мне делать с файлом, который весит 100500гб или мой файл обрабатывается уже вторые сутки.

sim3x

Ну так зачем тогда профи пишет код, который не пройдет volume тест? )

Меньше кода === меньше ошибок === лучше

LazyTalent

Спасибо, поржал.
Давайте все и всё писать без функций, а ООП забудем как страшный сон. А все названия переменных я предлогаю соктратить до одного, ну ладно 2х, символов. А чтобы еще меньше писать, то давайте повсеместно использовать global и goto.

Дмитрий, вопрос решается парой-тройкой выражений-генераторов, как с объёмом кода, так и с использованием памяти.

Источник

Удаление столбцов и строчек в csv

Здравствуйте!
Подскажите пожалуйста как удалить первые три столбца и определенные строки, разделенные запятыми, в csv файле?
Названия столбцы не имеют.

Удаление строчек и столбцов матрицы заполненных только отрицательными элементами
Здравствуйте! Помогите пожалуйста заставить программу работать правильно! Задание: удалять со.

Размножить .csv файл с заменой 2 строчек
Камрады! Имеется .csv вот такой структуры LOT 22137D4UQV OPERATION T32-TEST-1-AMB 10 0.

Вывести номера строчек и столбцов
1. Дана квадратная целочисленная матрица С. Если в ней есть строки, со-стоящие из нулей, то.

Удаление строчек
Будьте добры, помогите новичку! Надо написать макрос, чтобы не листе удалялись строчки, в которыхь.

Читаешь файл, каждую строку перегоняешь в массив (через split или csv reader), берешь от этих массивов слайсы ([3:]), записываешь в файл (‘,’.join(row))

alex white, а можно пример кода.

Добавлено через 30 минут

with open('file.csv') as csvfile: csvv = csv.reader(csvfile, delimiter=',', quotechar='"') for row in csvv: print(','.join(row[3:]).split(")

Эксперт С++

ЦитатаСообщение от New Life Посмотреть сообщение

Здравствуйте!
Подскажите пожалуйста как удалить первые три столбца и определенные строки, разделенные запятыми, в csv файле?
Названия столбцы не имеют.

Создаешь новый файл, читаешь старый и из него копируешь в новый то что интересует. Когда все завершил закрываешь файлы, удаляешь старый, переименовываешь новый.

Avazart, да, это все очевидно, вопрос был в другом.

Добавлено через 19 часов 41 минуту
alex white, как теперь удалить лишние строки в csv файле?

если данные в формате
_запятая_табуляция_значение_запятая

то выбираете первые три и удаляете, по строчно
пишите в НОВЫЙ файл

если данные в формате
_запятая_пробел_значение_запятая

то это сложнее =) так как в данных (если) встречаются фразы, могут возникать сложности и лучше разделитель делать запятую

Эксперт С++

Эксперт Python

ЦитатаСообщение от New Life Посмотреть сообщение

Ну реально — все ж уже рассказали.

with open("test2.csv",newline='') as source,open("test22.csv", "w", newline='') as dest: reader = csv.reader(source, delimiter=';') writer = csv.writer(dest,delimiter=';') #for _ in range(3): next(reader) # так можно пропускать строки с начала файла в нужном количестве skip_lines = [1,4,6] # пропускаем выборочно: 1 4 и 6 строку for line,row in enumerate(reader,1): if line in skip_lines: continue writer.writerow(row[3:]) # пропускаем первые три столбца каждой строки

http://python.su/forum/topic/33192/?page=3 http://python.su/forum/topic/3. ost-181554 и ниже разбирали экспорт товаров из 1С из убитой вирусом базы
там ребята помогли собрать все в csv а затем обработать csv

примерно то же самое =) и у вас

Как сделать нумерацию столбцов и строчек в шахматной доске?
Вот код: import tkinter as tk number_of_rows = number_of_columns = int(input("Введите.

Удаление строчек из модели
Представим ситуацию — есть 10 предметов. Список этих предметов хранится в БД. Моя задача в том.

Удаление строчек с реестра
доброго времени суток. подскажите плз, как удалить определенное значене try

Найти наименьший элемент в каждой строчке таблицы, 10 строчек, 20 столбцов
Помогите найти наименьший элемент в каждой строчке таблицы, 10 строчек, 20 столбцов

Удаление ненужных строчек из файла
Создал такую програму, она должна удалять коментари из кода с++ который записаный в файле.

Источник

Удаление столбцов и строчек в csv

Здравствуйте!
Подскажите пожалуйста как удалить первые три столбца и определенные строки, разделенные запятыми, в csv файле?
Названия столбцы не имеют.

Удаление строчек и столбцов матрицы заполненных только отрицательными элементами
Здравствуйте! Помогите пожалуйста заставить программу работать правильно! Задание: удалять со.

Размножить .csv файл с заменой 2 строчек
Камрады! Имеется .csv вот такой структуры LOT 22137D4UQV OPERATION T32-TEST-1-AMB 10 0.

Вывести номера строчек и столбцов
1. Дана квадратная целочисленная матрица С. Если в ней есть строки, со-стоящие из нулей, то.

Удаление строчек
Будьте добры, помогите новичку! Надо написать макрос, чтобы не листе удалялись строчки, в которыхь.

Читаешь файл, каждую строку перегоняешь в массив (через split или csv reader), берешь от этих массивов слайсы ([3:]), записываешь в файл (‘,’.join(row))

alex white, а можно пример кода.

Добавлено через 30 минут

with open('file.csv') as csvfile: csvv = csv.reader(csvfile, delimiter=',', quotechar='"') for row in csvv: print(','.join(row[3:]).split(")

Эксперт С++

ЦитатаСообщение от New Life Посмотреть сообщение

Здравствуйте!
Подскажите пожалуйста как удалить первые три столбца и определенные строки, разделенные запятыми, в csv файле?
Названия столбцы не имеют.

Создаешь новый файл, читаешь старый и из него копируешь в новый то что интересует. Когда все завершил закрываешь файлы, удаляешь старый, переименовываешь новый.

Avazart, да, это все очевидно, вопрос был в другом.

Добавлено через 19 часов 41 минуту
alex white, как теперь удалить лишние строки в csv файле?

если данные в формате
_запятая_табуляция_значение_запятая

то выбираете первые три и удаляете, по строчно
пишите в НОВЫЙ файл

если данные в формате
_запятая_пробел_значение_запятая

то это сложнее =) так как в данных (если) встречаются фразы, могут возникать сложности и лучше разделитель делать запятую

Эксперт С++

Эксперт Python

ЦитатаСообщение от New Life Посмотреть сообщение

Ну реально — все ж уже рассказали.

with open("test2.csv",newline='') as source,open("test22.csv", "w", newline='') as dest: reader = csv.reader(source, delimiter=';') writer = csv.writer(dest,delimiter=';') #for _ in range(3): next(reader) # так можно пропускать строки с начала файла в нужном количестве skip_lines = [1,4,6] # пропускаем выборочно: 1 4 и 6 строку for line,row in enumerate(reader,1): if line in skip_lines: continue writer.writerow(row[3:]) # пропускаем первые три столбца каждой строки

http://python.su/forum/topic/33192/?page=3 http://python.su/forum/topic/3. ost-181554 и ниже разбирали экспорт товаров из 1С из убитой вирусом базы
там ребята помогли собрать все в csv а затем обработать csv

примерно то же самое =) и у вас

Как сделать нумерацию столбцов и строчек в шахматной доске?
Вот код: import tkinter as tk number_of_rows = number_of_columns = int(input("Введите.

Удаление строчек из модели
Представим ситуацию — есть 10 предметов. Список этих предметов хранится в БД. Моя задача в том.

Удаление строчек с реестра
доброго времени суток. подскажите плз, как удалить определенное значене try

Найти наименьший элемент в каждой строчке таблицы, 10 строчек, 20 столбцов
Помогите найти наименьший элемент в каждой строчке таблицы, 10 строчек, 20 столбцов

Удаление ненужных строчек из файла
Создал такую програму, она должна удалять коментари из кода с++ который записаный в файле.

Источник

Читайте также:  Sign Up
Оцените статью