我在某些unix服务器上存在一个文件abc.zip。 我需要阅读abc.zip文件的内容,并将结果存储在pandas数据框中
我尝试使用paramiko从unix服务器读取文件,但是无法将结果存储在pandas dataframe中。
import paramiko
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname='xyx',username='abc',password='qwe')
#using unzip is creating 3 lines which are not needed in dataframe , so
#using tail.
stdin,stdout,stderr=ssh_client.exec_command("unzip -c path/abc.zip | tail -n +3")
#created an empty list.
unix_file =[]
#read the data from stdout and appended in list
for line in stdout.readlines():
unix_file.append(line)
#tried creating Dataframe by iterating over unix_file list
df = pd.DataFrame([sub.split("\t") for sub in unix_file])
我希望Dataframe具有标题和数据,但实际得到的结果是Dataframe正在考虑将Columns作为数据的一部分,并且默认情况下将[0,1,2,]值分配为columns。
任何更好的读取.zip文件和处理制表符分隔列表的方法都将有所帮助。
答案 0 :(得分:0)
如果read_csv
为您工作,请将其与远程数据一起使用:
stdin,stdout,stderr = ssh_client.exec_command("unzip -c path/abc.zip | tail -n +3")
pyitgdf = pd.read_csv(stdout, sep='\t', header=0)
答案 1 :(得分:0)
我做了一些变通方法,可能不是最好的方法,但是它可以正常工作。
'
stdin,stdout,stderr=ssh_client.exec_command("unzip -c /ges2/data/TransactionData/ITG/Well_extract_20120406_test.zip | tail -n +3")
unix_file =[]
for line in stdout.readlines():
unix_file.append(line)
output = [line.rstrip() for line in unix_file]
col = output[0].split('\t')
data = output[1:]
pyitgdf = pd.DataFrame([sub.split('\t') for sub in data], columns = col)
print(pyitgdf.head(5))
`
我知道有一些干净的方法可以实现这一目标,但并没有实现