python разбить строку на новые строки в файл - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь взять список из нескольких чисел и разбить каждое число на новую строку в новый файл.

Таким образом, f=['Hans', 'Anna', 'Vladimir', 'Michael', 'Ed', 'Susan', 'Janice', 'Jo'] в файле names.txt необходимо взять len списка в f и отделите каждый len от новой строки.

['4 4 8 7 2 5 6 2 '] должен быть в созданном файле

   4
   8
   7
   2
   5
   6
   2

Это то, что я сделал:

with open("names.txt","r") as f:
    f=f.read()
    f=f.split()  # take from original file

def size(x):

    with open("name_length.txt","w") as w:
        l=[str(len(n))+' ' for n in x]   # create the len list
        l="".join(l)
        l=str(l)
        l=l.split('\n+')
        print(f'this,{l}')
        print(f'this is,{l}')
        w.writelines(l)
        return l

print(size(f))         

1 Ответ

1 голос
/ 10 апреля 2020

Попробуйте:

#Read the data from input file.

with open("names.txt","r") as f:
    input_list = f.read().splitlines()    # Will look like : lines = ['Hans', 'Anna', 'Vladimir', 'Michael', 'Ed', 'Susan', 'Janice', 'Jo']

def write_len(input_list):
    with open("name_length.txt","w") as w:
        for item in input_list:
            f.write("{0}\n".format(len(item)))

    return 1

print(size(input_list))

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

Также я хотел бы добавить, что вы открыли файл для чтения и назвали указатель файла как f. В следующей строке вы используете ту же переменную f для хранения значения read"(). Это то, что вы должны избегать. Контекст переменной f изменяется и может создавать проблемы в некоторых сценариях ios.

Вот как вы можете использовать списочное понимание и join для достижения sh того же:

#Read the data from input file.

with open("names.txt","r") as f:
    input_list = f.read().splitlines()    # Will look like : lines = ['Hans', 'Anna', 'Vladimir', 'Michael', 'Ed', 'Susan', 'Janice', 'Jo']

def write_len(input_list):
    final_str = "\n".join([str(len(item)) for item in input_list])

    with open("name_length.txt","w") as w:
        w.write(final_str)

    return 1

print(size(input_list))

ВЫХОД:

4
4
8
7
2
5
6
2

Приведенный выше вывод записывается в файл.

...