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
код правильно печатает слово из списка слов, но когда добавляется та же переменная, в каждый файл добавляется только первая буква. код выводит слова построчно, но при добавлении они отображаются только как набор букв. Текстовый файл альфа-слов представляет собой список слов со словами в каждой строке. я хочу отсортировать слова по количеству букв
Что вы собираетесь делать с файлами 1.txt, 2.txt,... после запуска скрипта? Предоставление большего контекста поможет нам давать более качественные советы.
«Я хочу отсортировать слова по количеству букв». Чтобы уточнить: можете ли вы предоставить пример входного файла и ожидаемый результат?
«Текстовый файл альфа-слов представляет собой список слов со словами в каждой строке»: есть ли слова в каждой строке или только по одному слову в строке? потому что ваш код должен работать для первого. может быть, некоторые строки пусты или содержат только одно слово?
@Soapy Судя по файлу words_alpha.txt
при повторе, в каждой строке содержится одно слово. Зачем тогда ты используешь line.split(',')
? Также уточните, как должен выглядеть ожидаемый результат для этого входного файла.
Вы должны поделиться примером входного файла и ожидаемым форматом выходного файла.
В 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(',')))
Почему у вас
if
-цепочка вместоelif
-цепочки? Использованиеif
там, гдеelif
более уместно, обманчиво и неэффективно.