在ftp.storbinary()之后添加到csv文件的新行字符

时间:2013-09-12 04:34:54

标签: python csv ftplib

我正在尝试使用python的ftplib模块在ftp服务器上存储csv文件。 现在,我有大约30行代码,它们在二维数组中生成天气值的概率。然后我将这个二维数组写入csv文件。

当我将csv文件写入本地驱动器时,该文件在excel中按预期显示。但是,当我将文件上传到ftp服务器后查看该文件时,我发现每行后都添加了一个新的行字符。

我做了一些小测试,看看问题可能是什么,我已经能够使用coreftp上传csv文件了。我这样做后,csv文件显示正确。所以我很确定文件很好,当python将它上传到ftp服务器时会发生这种情况。

我最初使用.csv扩展名文件创建一个文本文件,然后将其重新打开为二进制文件并上传。我认为这可能是问题所以我尝试使用csv模块,但同样的问题。

这是我目前的代码......

TEMPSHEADER = [i-50 for i in range(181)]#upper bounds exclusive
WINDSHEADER = [i for i in range(101)]#upper bounds exclusive
HEADER = TEMPSHEADER + WINDSHEADER
for site in ensmosdic:
    ensmos = ensmosdic.get(site)
    with open(utcnow.strftime("%Y-%m-%d") + "-" +site+"-prob.csv","w",newline='') as csvfile:
        writer = csv.writer(csvfile, delimiter=",")
        writer.writerow(["CODE        ","F","ForecastDate","HOUR"]+HEADER)
        siteTable =[[0 for x in range(286)] for y in range(24,169)]#upper bounds exclusive
        ###########
        #other code here, but not important with regards to post
        ###########
        for i in siteTable:
            writer.writerow(i)

        csvfile.close()#not sure if you have to close csv file, not in csv module docs
    f = open(utcnow.strftime("%Y-%m-%d") + "-" +site+"-prob.csv","rb")
    ftpInno.storbinary("STOR " + utcnow.strftime("%Y-%m-%d-") + site +"-prob.csv",f)
    f.close()
ftpInno.close()

提前致谢

2 个答案:

答案 0 :(得分:0)

经过一个小时左右的故障排除后,答案相当简单,虽然我不完全确定它的工作原理。

我所做的是创建一个文本文件,而不是我在原始问题中所做的csv文件

with open(FILELOCATION + utcnow.strftime("%Y-%m-%d") + "-" +site+"-prob.txt","w") as f:
    #write to the file below
    f.close()
#open file again as a txt file
f = open(FILELOCATION + utcnow.strftime("%Y-%m-%d") + "-" +site+"-prob.txt","rb")
ftp.storlines("STOR " + utcnow.strftime("%Y-%m-%d-") + site +"-prob.csv",f)
f.close()

将文件作为二进制文件读取,然后使用storlines方法存储它,删除了我在将文件上传到ftp服务器后在文件中看到的额外行。

答案 1 :(得分:0)

这可能使您了解一些问题。我有一个项目,我在其中使用Windows命令行以及Windows Powershell来使用ftp get和mget命令传输.csv文件。就像您说的那样,我在每一行之间都得到了额外的收入。似乎切换到二进制传输模式解决了我的问题。例如,一旦进入ftp对话框,只需键入“ binary”,然后按Enter键,即可切换模式。enter image description here