Читать, манипулировать и сохранять текстовые файлы - PullRequest
0 голосов
/ 17 марта 2020

Все,

Я пытаюсь читать текстовые файлы, которые загружаются каждые 20 минут, в определенную папку, проверять ее, манипулировать ею и перемещать в другое место для дальнейшей обработки. По сути, я хочу проверить каждый входящий файл, проверить, содержит ли строка значение «0,00», и если да, удалить эту конкретную строку. В каждом файле есть две строки. Мне удалось манипулировать файлом с заданным именем, но теперь мне нужно сделать то же самое для файлов с именами переменных (в заголовке есть отметка времени). Один файл должен быть обработан за один раз.

Это то, что я получил до сих пор:

import os

path = r"C:\Users\r1.0"
dir = os.listdir(path)

def remove_line(line, stop):
    return any([word in line for word in stop])

stop = ["0.00"]
for file in dir:
    if file.lower().endswith('.txt'):
        with open(file, "r") as f: 
            lines = f.readlines()

        with open(file, "w") as f:
            for line in lines:
                if not remove_line(line, stop):
                    f.write(line)

Что работает, так это def-функция и два кода "с открытым ...". Что я здесь не так делаю?

Кроме того, можно ли записать файл в другой каталог с помощью функции open ()?

Заранее спасибо!

1 Ответ

0 голосов
/ 17 марта 2020

Ваш код выглядит в основном нормально. Я не думаю, что ваш метод понимания списка действительно удаляет строку. Вы можете написать в другую папку с помощью Open (). Это должно помочь вам:

import os

path = r"C:\Users\r1.0"
dir = os.listdir(path)

stop = ["0.00"]
for file in dir:
    if file.lower().endswith('.txt'):
        with open(file, "r") as f: 
            lines = f.readlines()
        # put the new file in a different location
        newfile = os path.join("New", "directory", file)
        with open(newfile, "w") as f:
            for line in lines:
                if stop in line: #check if we need to modify lime
                      #modify line here
                      #this will remove stop from the line
                      line.replace(stop, "")
                # Regardless of whether the line has changed, we need to write it out. 
                f.write(line)
...