Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从特定路径复制所有CSV文件,并将其';使用Paramiko库从远程服务器获取的s子目录_Python_Python 3.x_Sftp_Paramiko - Fatal编程技术网

Python 从特定路径复制所有CSV文件,并将其';使用Paramiko库从远程服务器获取的s子目录

Python 从特定路径复制所有CSV文件,并将其';使用Paramiko库从远程服务器获取的s子目录,python,python-3.x,sftp,paramiko,Python,Python 3.x,Sftp,Paramiko,我想从远程服务器的特定路径读取CSV文件列表 我也使用下面的脚本,当我指定一个特定路径时,它在我的本地运行良好,但在该路径中有许多子文件夹,每个子文件夹包含许多CSV文件,因此我希望从目录(/opt/prod\u odoo\u out/carrierfiles/dhl/)中获取CSV文件它的所有子目录递归并进行移植 我如何通过帕拉米科做到这一点 我尝试过os.walk,但它不工作,因为它只在本地机器上工作。任何建议都会有帮助 注意:目前我已将文件夹路径设置为“/opt/prod_odoo_out

我想从远程服务器的特定路径读取CSV文件列表

我也使用下面的脚本,当我指定一个特定路径时,它在我的本地运行良好,但在该路径中有许多子文件夹,每个子文件夹包含许多CSV文件,因此我希望从目录(/opt/prod\u odoo\u out/carrierfiles/dhl/)中获取CSV文件它的所有子目录递归并进行移植

我如何通过帕拉米科做到这一点

我尝试过os.walk,但它不工作,因为它只在本地机器上工作。任何建议都会有帮助

注意:目前我已将文件夹路径设置为“/opt/prod_odoo_out/carrierfiles/dhl/4/export/”,在主路径(dhl)文件夹中最多有20个文件夹,每个文件夹包含许多子文件夹

代码:

import paramiko
import psycopg2
from tendo import singleton
import os
import inspect
import re
import sys
import logging    


SECTION_SRC_STAR = "DEFAULT"

SSH_HOST = 'name.com'
SSH_USERNAME = 'root'
#SSH_KEYFILE = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile(inspect.currentframe()))[0], "ssh.key")))
SSH_KEYFILE ="/Users/sandeep/Documents/ssh_pub"

SSH_DIR = '/opt/prod_odoo_out/carrierfiles/dhl/4/export/'
SSH_PORT = 22
SSH_MASK = 'file_pattern.*\.csv'

DSN = "dbname='postgres' user='postgres' host='localhost' password='postgres' port='5432'"
TABLE_NAME = 'staging.dhl_tracking_details'    

conn = psycopg2.connect(DSN)
print("Database connected...")
conn.set_client_encoding('latin-1')
cur = conn.cursor()
cur.execute("SET datestyle='German'")

ssh = paramiko.SSHClient()

t = paramiko.Transport((SSH_HOST, SSH_PORT))

pk = paramiko.RSAKey.from_private_key(open('/Users/sandeep/Documents/ssh_pub/id_rsa'))
t.connect(username=SSH_USERNAME,pkey=pk)
print("SFTP Connected...")
try:
    sftp = paramiko.SFTPClient.from_transport(t) 
    sftp = t.open_sftp_client()
    print("SFTP Client : Open")
except Exception as e:
    msg = "Error connecting via ssh: %s" % e
    raise paramiko.SSHException(msg)

XT = "*.csv"
for filename in sftp.listdir(SSH_DIR):
    print(filename)

    #if re.match(SSH_MASK, filename):
    print("entered loop")
    path = '/%s/%s' % (SSH_DIR, filename)
    fobj = sftp.file(SSH_DIR+filename, 'rb')
    #cur.execute('TRUNCATE TABLE %s' % TABLE_NAME)
    sql = "COPY %s FROM STDIN WITH DELIMITER AS ';'  csv header"
    table = 'staging.dhl_tracking_details'
    cur.copy_expert(sql=sql % table, file=fobj)
    conn.commit()

t.close()

@MartinPrikryl我不需要下载文件,是否可以读取所有CSV文件内容并将其写入数据库?@MartinPrikryl我不需要下载文件,是否可以读取所有CSV文件内容并将其写入数据库?