我一直在研究这个问题,但是我发现很难找到我的特定情况的任何示例,我想在FTP上的文件夹中获取所有CSV,然后将它们组合在一起,然后显示它们。我已经可以抓住单个文件了,但是当将其与多个文件混合并组合时,我倾向于出现一个错误
TypeError Traceback (most recent call last)
<ipython-input-14-7b3417be9f4e> in <module>
19 print (mycsvdir)
20
---> 21 csvfiles = glob.glob(os.path.join(mycsvdir , '*.csv'))
22 dataframes = []
23 for csvfile in csvfiles:
c:usersxxxappdatalocalprogramspythonpython37-32libntpath.py in join(path, *paths)
74 # Join two (or more) paths.
75 def join(path, *paths):
---> 76 path = os.fspath(path)
77 if isinstance(path, bytes):
78 sep = b'\'
TypeError: expected str, bytes or os.PathLike object, not list
我将它们所有的所有文件组合在一起,而不仅仅是列表,所以我猜想我做了根本上错误的事情。完整代码 -
import glob
import os
import pandas as pd
import ftplib
from ftplib import FTP
def grabFile(ftp_obj, filename):
localfile = open(filename, 'wb')
ftp.retrbinary('RETR ' + filename, localfile.write, 1024)
ftp = FTP('f20-preview.xxx.com')
ftp.login(user='xxx', passwd = 'xxx')
ftp.cwd('/testfolder/')
mycsvdir = []
ftp.dir(mycsvdir.append)
files = []
for line in mycsvdir:
print (mycsvdir)
csvfiles = glob.glob(os.path.join(mycsvdir , '*.csv'))
dataframes = []
for csvfile in csvfiles:
df = pd.read_csv(csvfile)
dataframes.append(df)
result = pd.concat(dataframes, ignore_index=True)
result.to_csv('all.csv', index=False)
data = pd.read_csv('all.csv')
data.head()
i'是python相对较新的,我的很多经验都来自阅读有关此事的旧文章和课程,我为我的天真
mycsvdir = []
...
csvfiles = glob.glob(os.path.join(mycsvdir, '*.csv'))
mycsv
是一个列表。os.path.join
期望第一个参数的str, bytes or os.PathLike object
。
>>> root = 'a:\b\'
>>> f = 'foo.txt'
>>> os.path.join(root,f)
'a:\b\foo.txt'
使用文件名列表,在列表上迭代并为每个名称创建一个路径。
>>> fnames = ['a.txt', 'b.txt', 'c.txt']
>>> for name in fnames:
print(os.path.join(root,name))
a:ba.txt
a:bb.txt
a:bc.txt
>>>
相关:
使用Python的FTPLIB获取目录列表,便便
Python:如何获取文件列表并在FTP目录中使用通配符?
还有许多其他使用python ftp get list of files
或python ftp list files