从FTP文件夹中读取csv

时间:2018-06-07 11:07:52

标签: python ftp

我正在尝试从FTP文件夹中读取csv文件

ftp = FTP('adr')  
ftp.login(user='xxxx', passwd = 'xxxxx')
r = StringIO()
ftp.retrbinary('RETR /DataLoadFolder/xxx/xxx/xxx/'+str(file_name),r.write)
r.seek(0)
csvfile1 = csv.reader(r,delimiter=';')
input_file = [list(line) for line in csv.reader(r)] ----- Error

在最后一行收到错误

new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

我的csv文件

enter image description here

文字版本
enter image description here

每行末尾(17.00之后)有白色空格

数据从第二行开始

错误是什么意思?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

由于历史原因,错误消息只是询问您希望如何以不同方式处理换行符,您可以阅读解释here

要解决此问题,请在private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } protected UIImplementationProvider getUIImplementationProvider() { return new YourCustomUIImplementationProvider(); } ...bla bla blah 上指定newline,如下所示:

StringIO

根据StringIO documentation。如果newline设置为None,则在所有平台上将换行符写为r = StringIO(newline='') ,但在读取时仍会执行通用换行解码。

答案 1 :(得分:1)

我可以部分重现和修复。该错误是由包含错误行尾的行引起的。我可以通过在其他有效csv文件的末尾添加一行\r \n来重现。

修复它的一种简单方法是使用过滤器来消除空白行并清除行尾:

def filter_bytes(fd):
    for line in fd:
        line = line.strip()
        if len(line) != 0:
            yield(line + b'\r\n')

完成此操作后,您的代码可能会变为:

ftp = FTP('adr')  
ftp.login(user='xxxx', passwd = 'xxxxx')
r = BytesIO()
ftp.retrbinary('RETR /DataLoadFolder/xxx/xxx/xxx/'+str(file_name),r.write)
r.seek(0)
csvfile1 = csv.reader(filter_bytes(r),delimiter=';')
input_file = list(csvfile1)