从Unix文件夹中读取多个文件,并使用Python提取键值对

8 浏览
0 Comments

从Unix文件夹中读取多个文件,并使用Python提取键值对

从Unix目录中读取多个文件。我正在尝试读取存储在Unix文件夹中的多个文件,并在文本“input1”之后提取键值对。\n每个文件的数据格式如下:\ninput1 = {\'hostname\' : \'host\', \'port\' : \'22\', \'basedn\' : \'CN=Users\', \'bindusername\' : \'admin\']\n

需要读取字典并提取键值对,然后以以下格式打印:
    列1   列2
    xyz   123
    abc   456
    def   756
path = '/home/var/testfile/'
basepath =os.path.dirname(path)
with os.scandir(basepath) as entries:
        for entry in entries:
            if entry.is_file():
               fn=entry.name
def f(fn):
     with open(fn) as f:
        for s in f:
            data = pd.DataFrame()
            key = []
            value = []
            for k, v in s.items():
                key.append(k)
                value.append(v)
            data["Col1"] = key
            data["Col2"] = value
            print(data)
上述脚本在单个文件上运行正常,但当我循环读取文件夹中的所有文件时,它卡住了。

0
0 Comments

问题的原因是在尝试读取文件并使用给定的脚本提取键值对时,脚本无法正常工作。解决方法是修改脚本以正确处理文件中的数据。

以下是一种可能的解决方案:

import os
import pandas as pd
basepath = r"C:\Users\test1"
data = pd.DataFrame(columns=["Col1", "Col2"])
def extract_key_value_pairs(file_path):
    with open(file_path) as file:
        content = file.read()
        key_value_pairs = eval(content)
        keys = list(key_value_pairs.keys())
        values = list(key_value_pairs.values())
        data.loc[len(data)] = keys, values
with os.scandir(basepath) as entries:
    for entry in entries:
        if entry.is_file():
            file_path = os.path.join(basepath, entry.name)
            extract_key_value_pairs(file_path)
print(data)

输出结果将是一个包含所有文件中键值对的DataFrame:

    Col1                    Col2
0  [hostname, port, basedn, bindusername]  [host, 22, CN=Users, admin]

注意:上述解决方案假设每个文件中的内容都是一个有效的Python字典。为了避免安全风险,请确保文件中的内容是可信的,并对代码进行适当的验证和修改。

0
0 Comments

问题的出现原因:使用pandas库来打印一个字典是过度的。

解决方法:更新原始问题,使用代码格式化工具添加代码。

文章内容如下:

最近在使用Python时遇到了一个问题,我想从Unix文件夹中读取多个文件,并使用Python提取键值对。我尝试了下面的代码:

import pandas as pd
dic = {'xyz':'123' , 'abc':'456','def':'765'}
data = pd.DataFrame()
key = []
value = []
for k, v in dic.items():
    key.append(k)
    value.append(v)
data["Col1"] = key
data["Col2"] = value
print(data)

虽然这段代码可以正常运行并打印出键值对的DataFrame,但是在我尝试使用类似的方法从文件中读取数据时,却遇到了问题。以下是我尝试的代码:

import os
import pandas as pd
data = pd.DataFrame()
key = []
value = []
basepath = (r"C:\Users\test1")
with os.scandir(basepath) as entries:
    for entry in entries:
        if entry.is_file():
            fn=entry.name
            def f(fn):
                with open(fn) as f:
                    for s in f:
                        data = pd.DataFrame()
                        key = []
                        value = []
                        for k, v in s.items():
                            key.append(k)
                            value.append(v)
                        data["Col1"] = key
                        data["Col2"] = value
                        print(data)

然而,这段代码并没有正常运行,无法从文件中读取数据并提取键值对。我在论坛上寻求了帮助,有位用户建议我更新我的问题,并使用代码格式化工具将代码包裹起来。这样可以更清晰地展示问题,并使其他用户更容易理解我的代码。

另外,有其他用户指出,使用pandas库来打印一个字典是过度的,可能并不需要使用这个库来实现我的目标。因此,我可以尝试使用其他更简单的方法来提取键值对,而不是借助pandas库。

总结起来,我的问题是想要从Unix文件夹中读取多个文件,并使用Python提取键值对。然而,我的代码并没有成功实现这个目标。为了解决这个问题,我需要更新我的问题,使用代码格式化工具将代码包裹起来,并尝试使用更简单的方法来提取键值对,而不是使用pandas库。

0