Добавление строки в текстовый файл добавляет только первую букву Python

with open("words_alpha.txt", 'r') as f:
  your_result = [line.split(',') for line in f.read().splitlines()]

for i in your_result:
  for word in i:
    x = len(word)
    print(word)
    if x == 1:
      with open("1.txt", "a") as myfile:
        myfile.write(word)
    if x == 2:
      with open("2.txt", "a") as myfile:
        myfile.write(word)

    if x == 3:
      with open("3.txt", "a") as myfile:
        myfile.write(word)

    if x == 4:
      with open("4.txt", "a") as myfile:
        myfile.write(word)
    if x == 5:
      with open("5.txt", "a") as myfile:
        myfile.write(word)

    if x == 6:
      with open("6.txt", "a") as myfile:
        myfile.write(word)

    if x == 7:
      with open("7.txt", "a") as myfile:
        myfile.write(word)
    if x == 8:
      with open("8.txt", "a") as myfile:
        myfile.write(word)

    if x == 9:
      with open("9.txt", "a") as myfile:
        myfile.write(word)

    if x == 10:
      with open("10.txt", "a") as myfile:
        myfile.write(word)
    if x == 11:
      with open("11.txt", "a") as myfile:
        myfile.write(word)

    if x == 12:
      with open("12.txt", "a") as myfile:
        myfile.write(word)r 

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

Почему у вас if-цепочка вместо elif-цепочки? Использование if там, где elif более уместно, обманчиво и неэффективно.

Tom Karzes 30.06.2024 10:56

Что вы собираетесь делать с файлами 1.txt, 2.txt,... после запуска скрипта? Предоставление большего контекста поможет нам давать более качественные советы.

Håkon Hægland 30.06.2024 11:02

«Я хочу отсортировать слова по количеству букв». Чтобы уточнить: можете ли вы предоставить пример входного файла и ожидаемый результат?

Håkon Hægland 30.06.2024 11:08

«Текстовый файл альфа-слов представляет собой список слов со словами в каждой строке»: есть ли слова в каждой строке или только по одному слову в строке? потому что ваш код должен работать для первого. может быть, некоторые строки пусты или содержат только одно слово?

folen gateis 30.06.2024 11:10
relit.com/@soapy75/sorter#main.py это код и файлы
Soapy 30.06.2024 11:41

@Soapy Судя по файлу words_alpha.txt при повторе, в каждой строке содержится одно слово. Зачем тогда ты используешь line.split(',')? Также уточните, как должен выглядеть ожидаемый результат для этого входного файла.

Håkon Hægland 30.06.2024 11:46

Вы должны поделиться примером входного файла и ожидаемым форматом выходного файла.

Hermann12 30.06.2024 12:20
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В for word in i вы перебираете символы каждого слова, вам нужно удалить этот цикл. Другая проблема заключается в том, как вы читаете файл words_alpha: не нужно ничего разбивать или перебирать слова. Вам также следует заменить все условия if общим решением.

with open("words_alpha.txt", 'r') as f:
    your_result = f.readlines()

for word in your_result:
    x = len(word)
    print(word)
    with open(f"{x}.txt", "a") as myfile:
        myfile.write(f"{word}\n")
Ответ принят как подходящий

Я бы определил функцию для этой задачи: Если ваш words_alpha.txt выглядит так:

Alpha
Beta
Gamma
…
with open("words_alpha.txt", 'r') as f:
  your_result = [line.split(',') for line in f.read().splitlines()]

def append_file(word, length):
    with open(f"{length}.txt", "a") as myfile:
        myfile.write(f"\n{word}")
        print(f"word: {word} with length {length} written in {length}.txt")
            
for word in your_result:
    append_file(str(*word), int(len(*word)))

Если у вас есть список, разделенный запятыми, например: Alpha, Beta, Gamma, … , одна и та же строка, в которой следует использовать этот код:


with open("words_alpha.txt", 'r') as f:
    your_result = [line.split(',') for line in f.read().splitlines()]

def append_file(word, length):
    with open(f"{length}.txt", "a") as myfile:
        myfile.write(word+'\n')
        print(f"word: {word} with length {length} written in {length}.txt")
            
for row in your_result:
    for word in row:
        append_file(word.lstrip(), len(word.lstrip()))

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

Для списка, разделенного запятыми (csv), лучше используйте программу чтения csv():

import csv

def append_file(word, length):
    with open(f"{length}.txt", "a") as myfile:
        myfile.write(word+'\n')
        print(f"word: {word} with length {length} written in {length}.txt")

with open("words_alpha.txt", 'r') as csvfile:
    cr = csv.reader(csvfile, delimiter=' ')
    for row in cr:
        for word in row:
            append_file(word.strip(','), len(word.strip(',')))

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