у меня есть большой файл
Образец части моего файла
Цель состоит в том, чтобы создать отдельный файл, содержащий только строки из исходного файла, где 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)
@hochae спасибо, я немного изменил свой код, исправил ошибку, но теперь файл печатается пустым, как будто он удаляет все строки, а не только определенные. Какие-либо предложения?
«2» в вашем поле даты дает результат.
вы можете добавить пример данных как DataFrame в код, чтобы мы могли использовать его для тестирования решений
просто используйте print()
, чтобы увидеть, какая часть кода выполняется и что у вас есть в переменных. Он называется "print debuging"
и помогает увидеть, что делает код.
вы должны получить сообщение об ошибке, потому что вы определяете typedata
с нижним t
, но позже вы используете Typedata
с верхним T
.
Я понятия не имею, почему вы проверяете if row in reader:
- это не имеет смысла.
вы показываете код с неправильными отступами внутри with open()
. Поместите код с оригинальными отступами, потому что отступы могут изменить все, и мы не можем сказать, в чем может быть реальная проблема.
Как delete-row
может быть допустимым тегом для этого вопроса?
Ну, я бы хотел использовать только 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']
Вы назначаете один int вместо сравнения с ним. У вас может возникнуть ошибка, когда вы присваиваете значение int.