2015-11-19 3 views
0

Я разбираю URL-адреса и сохраняю их в файл. Код у меня прекрасно работает на Windows, но на Ubuntu это добавляет немного «и» в начале каждой строкиПравильное форматирование вывода в файл

import re 

reports = "C:\Users/_____/Desktop/Reports/" 
string = "Here is a string to test. http://www.blah.com & http://2nd.com" 
url_match = re.findall(r'(https?://[^\s]+)', string) 
print url_match 

if url_match != []: 
    with open(reports + "_URLs.txt", "a") as text_file: 
     text_file.write('{}'.format(url_match).replace(',', "\n").replace('[', '').replace(']', '').replace("'", '').replace(' ', '').__add__("\n")) 

enter image description here

Кто-нибудь есть идеи о том, как исправить это? Спасибо

+0

Как о 'формат text_file.write («{}»(url_match) .Надеть («», "\ n"). replace ('[', '') .replace (']', '') .replace ("'",' ') .replace (' ',' ') .__ add __ ("\ n ") [1:])' (обратите внимание на '[1:]' в конце) – inspectorG4dget

+0

'' {} '. Format (url_match) 'это просто' url_match', кстати. – TigerhawkT3

+0

Кроме того, вы должны использовать '+' вместо '.__ add __()'. – TigerhawkT3

ответ

2

'{}'.format(url_match) превращает список url_match в свою удобочитаемую строку, в которой вы затем используете некоторые свернутые замены строк, чтобы вернуться в список строк для записи. Где-то вдоль линии вы получаете строку юникода, следовательно, «u». Я не буду спекулировать, почему это происходит потому, что реальным решением является просто обрабатывать список:.

import re 

# reports = "C:\Users/_____/Desktop/Reports/" 
reports = "" # for test 
string = "Here is a string to test. http://www.blah.com & http://2nd.com" 
url_match = re.findall(r'(https?://[^\s]+)', string) 
print url_match 
if url_match: 
    with open(reports + "_URLs.txt", "a") as text_file: 
     for url in url_match: 
      text_file.write(url + '\n') 
+0

Да, это работает ... Спасибо! >> ", а затем OP пытается взломать это с кучей замен." :-) Я доберусь туда. Еще раз спасибо –

+0

Я не хотел звучать так грубо! Иногда, если это похоже на общий взлом, это хорошая идея вернуться к исходным данным и искать более чистый способ. – tdelaney

+0

Также, если вы обнаружите, что все еще есть данные в Юникоде, возможно, потому что входной файл имеет это или вы вставляете из буфера обмена, вы можете вставить 'url_match = [item.encode ('ascii', 'ignore'). для элемента в url_match] ' – jeedo

Смежные вопросы