Как удалить несколько строк

у меня есть большой файл

Образец части моего файла

Как удалить несколько строк

Цель состоит в том, чтобы создать отдельный файл, содержащий только строки из исходного файла, где type=1 (это столбец 1). Я приложил код, который у меня есть, он создает полностью пустой файл, который мне не нужен. Я чувствую, что я близок, но мне чего-то не хватает.

import csv
with open('Test.csv') as f, open('Temp.csv', 'w') as f2:
reader = csv.reader(f)
writer = csv.writer(f2)
for row in reader:
    if row in reader:
        if Typedata not in row:
            writer.writerow(row)

Вы назначаете один int вместо сравнения с ним. У вас может возникнуть ошибка, когда вы присваиваете значение int.

hochae 20.03.2022 05:12

@hochae спасибо, я немного изменил свой код, исправил ошибку, но теперь файл печатается пустым, как будто он удаляет все строки, а не только определенные. Какие-либо предложения?

user18517361 20.03.2022 06:40

«2» в вашем поле даты дает результат.

hochae 20.03.2022 06:56

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

furas 20.03.2022 08:05

просто используйте print(), чтобы увидеть, какая часть кода выполняется и что у вас есть в переменных. Он называется "print debuging" и помогает увидеть, что делает код.

furas 20.03.2022 08:06

вы должны получить сообщение об ошибке, потому что вы определяете typedata с нижним t, но позже вы используете Typedata с верхним T.

furas 20.03.2022 08:07

Я понятия не имею, почему вы проверяете if row in reader: - это не имеет смысла.

furas 20.03.2022 08:08

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

furas 20.03.2022 08:11

Как delete-row может быть допустимым тегом для этого вопроса?

Cristian Traìna 21.03.2022 09:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
9
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ну, я бы хотел использовать только str.split(), так как я не знаком с модулем csv. Пожалуйста, проверьте этот код.

f = open('test.csv')
d = f.read()
f.close()
n = '\n'.join([x for x in d.splitlines() if x.split(',')[1] == '2'])

Вы можете сохранить n с новым файлом, открытым с опцией 'w'.

Ответ принят как подходящий

Проблема в том, что if row in reader должен получить все данные из файла, чтобы проверить, находится ли row в reader. А потом уже нечего читать и нечего писать.

Вы можете увидеть это, если поставите print(row) между строк.

Я использую in_file = text.splitlines() только для проверки. Вы должны использовать open().

import csv

text = '''FKEY,TYPE,EFF,DATA
34787,2,Y,2022.03.20,1088825
14787,1,Y,2022.03.20,1088825
34787,2,Y,2022.03.20,1088825
14787,1,Y,2022.03.20,1088825
14787,1,Y,2022.03.20,1088825
34787,2,Y,2022.03.20,1088825
14787,1,Y,2022.03.20,1088825
14787,1,Y,2022.03.20,1088825'''

typedata = '2'

#with open('d:/Python/testfile.csv') as in_file, open('d:/Python/Data.csv', 'w') as out_file:
in_file = text.splitlines()
reader = csv.reader(in_file)
#writer = csv.writer(out_file)
for row in reader:
    if typedata not in row:
        print(row)
        #writer.writerow(row)

Результат:

['FKEY', 'TYPE', 'EFF', 'DATA']
['14787', '1', 'Y', '2022.03.20', '1088825']
['14787', '1', 'Y', '2022.03.20', '1088825']
['14787', '1', 'Y', '2022.03.20', '1088825']
['14787', '1', 'Y', '2022.03.20', '1088825']
['14787', '1', 'Y', '2022.03.20', '1088825']

Другие вопросы по теме