gpt4 book ai didi

使用 FTP 和列表进行 Python 编程

转载 作者:行者123 更新时间:2023-11-28 16:50:55 27 4
gpt4 key购买 nike

我的主要目标是随时检查 FTP 服务器是否有新文件命中,然后生成一个 .txt 文件,其中只复制了新文件。如果没有新文件,则不返回任何内容。这是我到目前为止所拥有的。我首先将文件从服务器复制到 oldlist.txt,然后连接到 FTP 站点并比较来自 newlist.txt 和 oldlist.txt 的数据以及我想要的临时 FTP 文件 changes.txt 中的差异。每次连接时,我都会更改 newlist.txt 并将其设为 oldlist.txt,以便下次连接时进行比较。有一个更好的方法吗?我的列表似乎每次都不会更改数据。抱歉,如果这令人困惑,谢谢。

import os
filename = "oldlist.txt"
testing = "newlist.txt"
tempfilename = "Temporary FTP file Changes.txt"

old = open(filename, "r")
oldlist = old.readlines()
oldlist.sort()


from ftplib import FTP
ftp = FTP("ftpsite", "username", "password")
ftp.set_pasv(False)
newlist = []
ftp.dir(newlist.append)
newlist.sort()
ftp.close()

bob = open(testing, "w")
for nl in newlist:
bob.write(nl + "\n")


hello = open(tempfilename, "w")

for c in newlist:
if c not in oldlist:
hello.write(c + "\n")

bob.close()
old.close()
hello.close()

os.remove("oldlist.txt")

os.rename("newlist.txt", "oldlist.txt")

最佳答案

将列表转换为集合更容易/更快,而不用担心排序。

for filename in set(newlist) - set(oldlist):
print 'New file: ', filename

此外,您可以使用 shelve 模块创建一个像常规 Python 字典一样方便访问的持久存储,而不是将列表作为原始文本保存到文件中。

否则,您的代码具有简单明了的优点。

这是一个已解决的例子:

from ftplib import FTP
import shelve

olddir = shelve.open('filelist.shl') # create a persistent dictionary

ftp = FTP('ftp1.freebsd.org')
ftp.login()

result = []
ftp.dir(result.append)
newdir = set(result[1:])

print ' New Files '.center(50, '=')
for line in sorted(set(newdir) - set(olddir)):
print line
olddir[line] = ''
print ' Done '.center(50, '=')
olddir.close()

关于使用 FTP 和列表进行 Python 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com