Вы должны открыть первый файл в качестве "r+"
для того, чтобы читать и писать, например, так:
f = open(filename,"r+")
for line in f:
e = line.split(',')
if len(e) > 28:
with open(filename2, "a") as text_file:
text_file.write(line.encode('cp1252'))
f.seek(0)
f.truncate()
f.close()
Я также сделал код более эффективным, как она должна пройти по линии вместо копируя их в сторону. Еще более эффективным подходом было бы это:
with open(filename,"r+") as file1, open(filename2, "a") as file2:
for line in f:
if line.count(',') > 27:
file2.write(line.encode('cp1252'))
file1.truncate(0)
Таким образом, вы не открыть файл каждой итерации, и так как вы не используете значения разделения, вы можете просто считать запятые (,
) и сравнить до 27 вместо 28.
Удаление только скопированные строки
Если вы хотите удалить только скопированные строки, а не пустой файл, у вас нет другого пути, чем копирование всего файла в память или используя tempfile.
Это способ сделать это путем копирования в память:
with open(filename,"r+") as file1, open(filename2, "a") as file2:
file_lines = file1.readlines()
file1.seek(0)
file1.truncate()
for line in file_lines:
if line.count(',') > 27:
file2.write(line.encode('cp1252'))
else:
file1.write(line)
Пожалуйста, убедитесь, чтобы указать кодировку, если вы используете Python 3.x.
им пытаются получить его так, что только скопированные строки будут удалены, но когда я использую первый код, указанный выше, он опустошает цельные первый текстовый файл. как мне изменить, удаляются только выбранные строки? – gdogg371
@ gdogg371 Обновлен мой ответ соответственно. – Bharel
Ваш обновленный код неверен и испортит содержимое 'file1'. – alexis