我正在尝试使用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个),我该如何修复/有更好的更简单的解决方案
答案 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)