Как я могу удалить пропущенные строки из вывода Pastebin?

Я пытаюсь использовать Pastebin для размещения двух текстовых файлов, чтобы любая копия моего скрипта могла обновляться через Интернет. Мой код работает, но в результате.py файл имеет пустую строку между каждой строкой. Вот мой сценарий...

import os, inspect, urllib2

runningVersion = "1.00.0v"
versionUrl = "http://pastebin.com/raw.php?i=3JqJtUiX"
codeUrl = "http://pastebin.com/raw.php?i=GWqAQ0Xj"
scriptFilePath = (os.path.abspath(inspect.getfile(inspect.currentframe()))).replace("\\", "/")

def checkUpdate(silent=1):
    # silently attempt to update the script file by default, post messages if silent==0
    # never update if "No_Update.txt" exists in the same folder
    if os.path.exists(os.path.dirname(scriptFilePath)+"/No_Update.txt"):
        return
    try:
        versionData = urllib2.urlopen(versionUrl)
    except urllib2.URLError:
        if silent==0:
            print "Connection failed"
        return
    currentVersion = versionData.read()
    if runningVersion!=currentVersion:
        if silent==0:
            print "There has been an update.\nWould you like to download it?"
        try:
            codeData = urllib2.urlopen(codeUrl)
        except urllib2.URLError:
            if silent==0:
                print "Connection failed"
            return
        currentCode = codeData.read()
        with open(scriptFilePath.replace(".py","_UPDATED.py"), mode="w") as scriptFile:
            scriptFile.write(currentCode)
        if silent==0:
            print "Your program has been updated.\nChanges will take effect after you restart"
    elif silent==0:
        print "Your program is up to date"

checkUpdate()

Я удалил графический интерфейс (wxpython) и установил скрипт для обновления другого файла вместо действующего. Бит "No_Update" для удобства работы.

Я заметил, что при открытии результирующего файла с помощью Блокнота не отображаются пропущенные строки, при открытии с помощью Wordpad возникает беспорядок, а при открытии бездействия - пропущенные строки. Исходя из этого, кажется, что это проблема форматирования, хотя "сырой" файл Pastebin, похоже, не имеет никакого форматирования.

РЕДАКТИРОВАТЬ: я мог бы просто удалить все пустые строки или оставить все как есть без проблем (что я заметил), но это значительно уменьшило бы читаемость.

1 ответ

Решение

Попробуйте добавить двоичный квалификатор в свой open():

with open(scriptFilePath.replace(".py","_UPDATED.py"), mode="wb") as scriptFile:

Я заметил, что ваш файл на pastebin находится в формате DOS, поэтому он имеет \r\n в этом. Когда вы звоните scriptFile.write(), это переводит \r\n в \r\r\n, который ужасно сбивает с толку.

Определение "b" в open() заставит скрипт-файл пропустить этот перевод и записать файл в формате DOS.

В качестве альтернативы, вы можете убедиться, что файл pastebin имеет только \n в нем, и использовать mode="w" в вашем сценарии.

Другие вопросы по тегам