从远程服务器读取TSV文件

时间:2020-08-16 09:03:04

标签: python python-3.x pandas

我有此功能,该功能返回我需要读取的文件的路径

def specie_to_file(specie):
    switcher = {
    'human': 'sftp://eliran@SERVER/PATH/TO/FILE1',
    'mouse': 'sftp://eliran@SERVER/PATH/TO/FILE2'
    }
    return switcher.get(specie, None)

稍后,我正在尝试打开文件

database = pd.read_csv(db_file, sep='\t')

db_file拥有上述路径之一。

执行脚本时出现此错误:

Traceback (most recent call last):
.
.
.
  File "gene_converter.py", line 111, in converter
    database = pd.read_csv(open(db_file), sep='\t')
FileNotFoundError: [Errno 2] No such file or directory: 'sftp://eliran@SERVER/PATH/TO/FILE1'

我已经检查了文件名以及它们都存在且位于正确位置的路径。

我尝试了以下操作并获得了相同的追溯:

database = pd.read_csv(Path(db_file), sep='\t')
database = pd.read_csv(open(db_file,'r'), sep='\t')
database = pd.read_csv(open(db_file,'r').read(), sep='\t')

2 个答案:

答案 0 :(得分:2)

您的文件位于FTP服务器上。

使用paramiko进行阅读。

with sftp.open("sftp://eliran@SERVER/PATH/TO/FILE1") as f:
    pd.read_csv(f)

答案 1 :(得分:1)

根据文档:

“ filepath_or_bufferstr,路径对象或类似文件的对象 任何有效的字符串路径都是可以接受的。该字符串可以是URL。有效的URL方案包括http,ftp,s3,gs和file。对于文件URL,需要一个主机。本地文件可以是:file://localhost/path/to/table.csv。

如果要传递路径对象,pandas会接受任何os.PathLike。

通过类似文件的对象,我们使用read()方法引用对象,例如文件处理程序(例如,通过内置的open函数)或StringIO。”

SFTP未显示在受支持的URL方案列表中。因此,您应该从URL构建一个StringIO对象,并将其传递给read_csv。

安装SFTP库。下载文件,然后阅读。 http://docs.paramiko.org/en/stable/api/sftp.html