0

我正在尝试在RPyC线程服务器中使用一个函数,该函数dict通过循环遍历指定路径中的所有文件夹来返回包含文件的属性,例如位置、文件名。

但是,当它返回给客户端时,列表对象 (fl) 的类型为

<netref class 'rpyc.core.netref.builtins.list'>

我尝试使用它转换为列表

ft= list(ft)

但这也将其转换为 ' <class 'list'>' 而不是'list'预期的那样。

我希望将其转换为数据框,但使用“ df = pd.DataFrame(fl)”会返回错误'AttributeError: cannot access 'keys'

RPyC服务器功能:

我最接近找到相关回复的是在这篇文章中,但我仍然不知道我是否理解正确。有没有办法将它放入数据框或转换为可以轻松转换的普通列表?任何帮助表示赞赏。

服务器:

    PATH = r"C:\Temp"
def exposed_fquery():
    fl = []
    for (dpath, dname, fname) in os.walk(PATH):
        for f in fname:
            td = {}
            td['Location'] = dpath
            td['Name'] = f
            fl.append(td)
            print (fl)
    return (fl)

客户:

con = rpyc.connect('localhost',5000)
s = con.root.Server()
filemap = s.fquery(index)
print (type(filemap), "\n", filemap)  
print (type(ft), "\n",ft)
ft= list(ft)
print (type(ft))

结果:

<netref class 'rpyc.core.netref.builtins.list'>
[{'Location': 'C:\\Temp\\', 'Name': 'file1.txt'}, {'Location': 'C:\\Temp\\', 'Name': 'Test.txt'}]
<class 'list'>
4

2 回答 2

0

我不确定您的麻烦究竟来自哪里,但我怀疑您遇到了一些错误的输入,因为您提供的示例似乎有效。

In [7]: ft = [{'Location': 'C:\\Temp\\', 'Name': 'file1.txt'}, {'Location': 'C:\\Te
   ...: mp\\', 'Name': 'Test.txt'}]

In [8]: pd.DataFrame(ft)
Out[8]:
   Location       Name
0  C:\Temp\  file1.txt
1  C:\Temp\   Test.txt

In [9]: pd.DataFrame.from_records(ft)
Out[9]:
   Location       Name
0  C:\Temp\  file1.txt
1  C:\Temp\   Test.txt

如您所见,两者都pd.DataFrame(ft)有效pd.DataFrame.from_records(ft)

另请注意,当您打印 type 时list<class 'list'>您会得到:

In [14]: type(ft)
Out[14]: list

In [15]: print(type(ft))
<class 'list'>
于 2019-08-10T14:25:16.137 回答
0

如果要获取dict类型的真实值,只需在发送到RPC客户端之前用pickle将响应作为序列化处理,再次用pickle反序列化后就可以得到dict类型的真实值。

于 2020-04-09T05:59:28.290 回答