Python странный символ новой строки в текстовом файле - PullRequest
1 голос
/ 09 февраля 2020

У меня есть другая программа (для которой у меня нет исходного кода), которая пишет в текстовый файл, затем, когда я пытаюсь прочитать текстовый файл, как это,

with open("domain.com/alive_domains.txt") as f:
    for line in f:
        print(line)

вывод что-то вроде этого: (это было скопировано и вставлено прямо из окна консоли Pycharm)

http://stage.oidc.payments.domain.com

https://oidc.help.domain.com

https://search.domain.com

https://oidc.payments.domain.com

https://stage.oidc.payments.domain.com

http://stage.oidc.help.domain.com

https://stage.oidc.help.domain.com

по какой-то причине есть странные символы новой строки, которые я не считаю новыми строками

Я попытался исправить это, выполнив что-то вроде


abc = "abcdefghijklmnopqrstuvwxyz:/."

def fix_string(s):
    new_s = ""
    for char in s:
        if char in abc:
            new_s += char
    return ''.join(new_s)

with open("domain.com/alive_domains.txt") as f:
    for line in f:
        print(fix_string(line))

И я получил тот же результат ..


Я попытался поискать в Google, и наткнулся на это регулярное выражение

   with open("domain.com/alive_domains.txt") as f:
        for line in f:
            line = re.sub("[^a-z0-9/.:]+","", line, flags=re.IGNORECASE)
            print(fix_string(line))

И снова, он дал мне тот же вывод с новыми строками

Он не делает это с любым другим файлом, который я пытаюсь прочитать построчно. Есть ли способ идентифицировать странного персонажа? Если есть один

1 Ответ

1 голос
/ 09 февраля 2020

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

Чтобы подавить это поведение, введите

print(some_string, end='')

В качестве альтернативы, если вам не нужна дополнительная функциональность print, вы можете записать в дескриптор файла напрямую через

f.write(some_sring)
...