Загрузка текстового файла с помощью двоичного файла или ASCII, оба оставляют это поле пустым? - PullRequest
1 голос
/ 17 февраля 2012

Итак, я пытался создать плагин, чтобы другой конец мог загрузить ссылки в текстовом файле на FTP-сервере, и я могу получить текущую версию на сервере и изменить ее, но когда я пытаюсь повторно загрузить его текстовый файл выглядит пустым. Я попытался использовать FTP.storline и FTP.storbinary, но оба результата дали один и тот же результат. Я поместил функцию печати в обратный вызов, чтобы увидеть, происходит ли что-то, чего не происходит. В любом случае, любая помощь по поводу того, почему я не могу отправить свой файл со всеми приложенными данными, будет превосходной: D!

-Clement

КОД:

def upload(link,ip,username,passwd):
    present = False
    connection = ftplib.FTP(ip)
    connection.login(user=username,passwd=passwd)
    items = connection.nlst()
    for x in items:
        if x == "list.txt":
            present = True
            break
    if present == True:
        username = os.getlogin()
        print("Got login!")
        locallist_dir = "/Users/" + username
        locallist = locallist_dir + "/list.txt"

        opened_llist_r = open(locallist, "rb")
        opened_llist = open(locallist, "wt")
        print("Opened file in", locallist)

        connection.retrlines("RETR %s" % "list.txt", opened_llist.write)
        print("Added lines from FTP")

        opened_llist.write(link + " ")
        print("Link:","'",link,"'","written!")
        print(opened_llist," | ",opened_llist_r)

        connection.storbinary("STOR %s" % "list.txt", opened_llist_r, 8192, print)
        print("Re-uploaded!")



        opened_llist.close()
        opened_llist_r.close()
    else:
        print("Your current Connection does not have the list.txt file.")

    connection.close()
    print("Connection Closed.")

ОТВЕТИЛ:

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

def upload(link,ip,username,passwd):
    present = False
    connection = ftplib.FTP(ip)
    connection.login(user=username,passwd=passwd)
    items = connection.nlst()
    for x in items:
        if x == "list.txt":
            present = True
            break
    if present == True:
        username = os.getlogin()
        print("Got login!")
        locallist_dir = "/Users/" + username
        locallist = locallist_dir + "/list.txt"

        opened_llist = open(locallist, "wt")
        print("Opened file in", locallist)

        connection.retrlines("RETR %s" % "list.txt", opened_llist.write)
        print("Added lines from FTP")

        opened_llist.write(link + " ")
        print("Link:","'",link,"'","written!")
        print(opened_llist)
        opened_llist.close()

        opened_llist_r = open(locallist, "rb")
        connection.storbinary("STOR %s" % "list.txt", opened_llist_r, 8192, print)
        print("Re-uploaded!")



        opened_llist_r.close()
    else:
        print("Your current Connection does not have the list.txt file.")

    connection.close()
    print("Connection Closed.")        

1 Ответ

1 голос
/ 17 февраля 2012

Открытие одного и того же файла дважды опасно и может привести к неожиданному поведению. Что-то вроде этого лучше:

opened_llist = open(locallist, "wt")
connection.retrlines("RETR %s" % "list.txt", opened_llist.write)
opened_llist.write(link + " ")
opened_llist.close()
opened_llist_r = open(locallist, "rb")
connection.storbinary("STOR %s" % "list.txt", opened_llist_r, 8192, print)
opened_llist_r.close()
...