从Unix文件夹中读取多个文件,并使用Python提取键值对
从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) 上述脚本在单个文件上运行正常,但当我循环读取文件夹中的所有文件时,它卡住了。
问题的原因是在尝试读取文件并使用给定的脚本提取键值对时,脚本无法正常工作。解决方法是修改脚本以正确处理文件中的数据。
以下是一种可能的解决方案:
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字典。为了避免安全风险,请确保文件中的内容是可信的,并对代码进行适当的验证和修改。
问题的出现原因:使用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库。