Python - 通过ftp获取文件的行数

时间:2017-09-27 11:32:23

标签: python ftp ftplib

我正在尝试使用ftplib来计算文件中的行数。这是我到目前为止所提出的。

ftp = FTP('ftp2.xxx.yyy')
ftp.login(user='xxx', passwd='yyy')
count = 0
def countLines(s):
    nonlocal count
    count += 1
    x=str(s).split('\\r')
    count += len(x)

ftp.retrbinary('RETR file_name'], countLines)

但是线数已经减少了一些(我得到了大约20个),我该如何修复/有更好的更简单的解决方案

2 个答案:

答案 0 :(得分:2)

您必须使用FTP.retrlines,而不是private void CbFarbe(object sender, RoutedEventArgs e) { List<System.Windows.Media.Color> colors = new List<System.Windows.Media.Color> { System.Windows.Media.Colors.Blue, System.Windows.Media.Colors.Green, System.Windows.Media.Colors.LightBlue, System.Windows.Media.Colors.Black, System.Windows.Media.Colors.White, System.Windows.Media.Colors.Gray }; var comboBox = sender as ComboBox; comboBox.ItemsSource = colors; comboBox.SelectedIndex = 1; }

FTP.retrbinary

count = 0 def countLines(s): global count count += 1 ftp.retrlines('RETR file_name', countLines)

  

为每个数据

调用FTP.retrbinary函数

适用于callback

  

为每个调用FTP.retrlines函数,其中包含一个字符串参数,其中包含删除了尾随CRLF的行。

使用callback可以得到更多,因为如果一个块在一行的中间结束,那么该行会被计算两次。

答案 1 :(得分:1)

根据建议,使用FTP.retrlines,但如果您必须使用FTP.retrbinary,则需要依赖每个“\ n”,而不是每个回调都是好。

import ftplib

class FTPLineCounter(object):

    def __init__(self):
        self.count = 0

    def __call__(self, file_text):
        """Count the lines as the file is received"""
        self.count += file_text.count(b"\n")



ftp = ftplib.FTP("localhost")
ftp.login()

counter = FTPLineCounter()

ftp.retrbinary("RETR file_name", counter)

print(counter.count)