2

我正在尝试使用 python 的 ftplib 模块将 csv 文件存储在 ftp 服务器上。现在,我有大约 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()

提前致谢

4

2 回答 2

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 服务器后在文件中看到的额外行。

于 2013-10-09T01:00:42.780 回答
0

这可能会对您的问题有所帮助。我有一个项目,我使用 windows 命令行和 windows powershell 使用 ftp get 和 mget 命令传输 .csv 文件。就像你说的那样,我在每一行之间都得到了额外的收益。切换到二进制传输模式似乎解决了我的问题。例如,一旦您进入 ftp 对话框,只需键入“binary”并按 Enter 键,它就会切换模式。在此处输入图像描述

于 2020-10-03T15:48:07.953 回答