PyN*_*bie 1 python newline ftplib
我一直使用一个非常简单的批处理文件从UNIX ftp服务器下载数百万个文件多年
login
passwd
ascii
prompt n
cd to the right directory
get some_file
get another_file
cd to the next directory
repeat the pattern
Run Code Online (Sandbox Code Playgroud)
关于这一点的好处是它很简单,并且所有文件都使用Window的换行符到达,因此文件已准备好与我现有的程序一起使用.由于我的路由器发生了一些变化,我不得不编写一个Python脚本来提取文件 - 我的第一个版本的脚本非常简单 - 但它的工作原理
for key in key_filings:
for filing in key_filings[key]:
remote_directory = '/foo/bar/' + key + '/' + filing['key_number']
ftp.cwd(remote_directory)
text_file = filing['txt']
ftp.retrlines('RETR '+ text_file, open(save_dir + text_file,'w').writelines)
hdr_file = filing['hdr']
ftp.retrlines('RETR ' + hdr_file, open(save_dir + hdr_file,'w').writelines)
Run Code Online (Sandbox Code Playgroud)
但是,文件没有任何明显的换行符.这些文件存储在unix系统中.在我使用Windows CMD shell下载文件之前,换行符就在那里.我已经尝试发送ASCII命令,但正如预期的那样没有任何影响.
至关重要的是,我能够访问最初存在的换行符,因为我的一些代码处理是基于行的.
正如通常在我写出问题时发生的那样我可以找到答案.我想删除这个问题而不是回答它,但我认为可能有其他像我这样的人可以使用答案,所以我将发布我从Fredrik Lundh 这个网页上带走的内容.
我想保存文件而不是像在该脚本中那样将其打印到屏幕上
基本上后退是从服务器一次检索一行(在下面的脚本中我正在写行,因为它到达时添加了换行符.
我真的不了解lamda函数或回调是什么,所以这是最终围绕这些概念的借口.
import ftplib
ftp = ftplib.FTP('ftp.some.site', user = 'username', passwd = 'password_for_username')
for key in key_filings:
for filing in key_filings[key]:
remote_directory = '/foo/bar/' + key + '/' + filing['key_number']
ftp.cwd(remote_directory)
text_file = filing['txt']
save_text_ref = open(save_dir + text_file, 'w')
ftp.retrlines('RETR '+ text_file, lambda s, w = save_text_ref.write: w(s+'\n'))
save_text_ref.close()
hdr_file = filing['hdr']
save_hdr_ref = open(save_dir +hdr_file,'w')
ftp.retrlines('RETR ' + hdr_file, lambda s, w = save_hdr_ref.write: w(s+'\n'))
save_hdr_ref.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1837 次 |
| 最近记录: |