Как я могу сделать что-то подобное?

with open(r'C:\some_list.txt') as f:
    list = f.readlines()
for line in list:
    if line: #has more than x characters
        delete line
-1
Retardrino 10 Июл 2019 в 09:18

5 ответов

Лучший ответ

Если файл достаточно мал, проще всего прочитать его, отфильтровать, а затем записать все.

with open(r'C:\some_list.txt')  as f:
    lines = f.readlines()

# Keep lines <= 10 chars long with a list comprehension
filtered_lines = [line for line in lines if len(line) > 10]

# Do what you like with the lines, e.g. write them out into another file:
with open(r'C:\filtered_list.txt', 'w') as f:
    for line in filtered_lines:
        f.write(line)

Если вы хотите передать совпадающие строки в другой файл, это еще проще:

with open(r'C:\some_list.txt') as in_file, open(r'C:\filtered_list.txt', 'w') as out_file:
    for line in in_file:
        if len(line) <= 10:
            out_file.write(line)
2
AKX 10 Июл 2019 в 06:34

Попробуйте (я делаю 3 в качестве примера):

with open(r'C:\some_list.txt')  as f:
    l = [i for i in f if len(i) > 3]

Я переименовал list в l, поскольку list является встроенным.

0
U10-Forward 10 Июл 2019 в 06:23

Вы можете прочитать файл построчно, записать строку в новый файл, если он пройдет ограничение (отказаться от других строк). Для больших файлов это настолько эффективно с точки зрения использования памяти:

with open('file_r.txt', 'r') as file_r, open('file_w.txt', 'w') as file_w:
    thresh = 3
    for line in file_r:
        if len(line) < thresh:
            file_w.write(line)
1
Masoud 10 Июл 2019 в 06:33

Сначала сохраните строки в списке, который не будет удален, прочитав одну за другой:

the_list = []
with open(r'C:\some_list.txt', "r") as f:
    for line in f:
        #print(len(line))
        if (len(line)) < 50:#here I used 50 charecters
            the_list.append(line)

Затем запишите список в ваш файл:

with open(r'C:\some_list.txt', 'w') as f:
    for line in the_list:
        f.write(line)

Если вы не хотите использовать список или файл слишком велик, попробуйте:

with open(r'C:\some_list.txt', "r") as f, open('new.txt', 'a') as fw:
    for line in f:
        if (len(line)) < 50:
            fw.write(line)

Замените output.txt в соответствии с вашими потребностями. Выше код будет читать построчно из some_list.txt, а затем писать в «output.txt», если строка содержит менее 50 символов

0
Asif 10 Июл 2019 в 06:54

И наоборот, это можно сделать так:

# fname : file name
# x : number of characters or length
def delete_lines(fname = 'test.txt', x = 8):
    with open(fname, "r") as f:
        lines = f.readlines()
    with open(fname, "w") as f:
        for line in lines:
            if len(line) <= x:            
                f.write(line)

delete_lines()

Конечно, есть лучшие способы сделать это.

0
Apoorv Patne 10 Июл 2019 в 06:40