запись в файл строка за строкой python - PullRequest
1 голос
/ 13 марта 2019

Здесь я хочу записать word_count в каждом цикле построчно в файл. Тем не менее, они написаны все спина к спине.

import os
import string
def remove_punctuation(value):
    result = ""
    for c in value:
        # If char is not punctuation, add it to the result.
        if c not in string.punctuation and c != '،' and c != '؟' and c !   = '؛' and c != '«' and c != '»':
            result += c
    return result
def all_words(file_path):
    with open(file_path, 'r', encoding = "utf-8") as f:
        p = f.read()
        p = remove_punctuation(p)
        words = p.split()
        word_count = len(words)
        return str(word_count)
myfile = open('D:/t.txt', 'w')
for root, dirs, files in os.walk("C:/ZebRa", topdown= False):
    for filename in files:
        file_path = os.path.join(root, filename)
        f = all_words(file_path)
        myfile.write(f)
        break
myfile.close()

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

myfile.write(f'\n')

Ответы [ 3 ]

3 голосов
/ 13 марта 2019

Измените эту строку:

return str(word_count)

на

return str(word_count) + '\n'

Если вы используете Python 3.6+, вы также можете попробовать:

return f'{word_count}\n'
1 голос
/ 13 марта 2019

Когда вы используете file.write (), попробуйте использовать это вместо:

myfile.write(f+"\n")

Это добавит новую строку после каждой итерации

Однако, чтобы ваш код работал, вам нужноитерации в цикле, например:

for string in f:
    file.write(string+"\n")

Надеюсь, это поможет

1 голос
/ 13 марта 2019

Вы можете написать символ новой строки в конце каждой итерации:

for root, dirs, files in os.walk("C:/ZebRa", topdown= False):
    for filename in files:
        file_path = os.path.join(root, filename)
        f = all_words(file_path)
        myfile.write(f)
        break
    myfile.write('\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...