因此,我尝试使用dict
进行排序循环。我想做的是在我的文件夹中有两个不同的json文件,我想在其中为每个json文件应用每个dict
。意味着json
文件1将是字典中的第一个文件,第二个json文件将是第二个字典。
discordHooks = {'swedish': [
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/ASDFDFGDSFGSDFG',
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/EAAEFAEFAFlF'],
'italian':[
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/qwertyuiop',
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/lkjahgfdsa']
}
def sendToDiscord():
directory = os.fsencode('./slack')
for counters, file in enumerate(os.listdir(directory)):
filename = os.fsdecode(file)
if filename.endswith(".json"):
with open('./slack/' + filename) as slackAttachment:
print(discordHooks.get('italian', [counters]))
我的想法是我希望它使用for counters, file in enumerate(os.listdir(directory)):
遍历每个json文件,而我希望它发生的是第一个循环将是第一个json文件==应该打印出第一个dict值而下一个循环将是第二个dict值。
但是我也不知道该怎么做,我也不想使用列表。
我如何循环遍历每个dict,所以json文件的第一个循环将是dict的第一个值,第二个循环将是dict的第二个值?
更新:
在我的文件夹中,我有两个json文件,第一个文件名为Thrill.json
,第二个文件名为HelloWorld.json
,它们始终相同(不会在任何位置添加新的json文件或删除json。时间)。
所以现在我正在使用代码:
discordHooks = {'swedish': [
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/ASDFDFGDSFGSDFG',
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/EAAEFAEFAFlF'],
'italian':[
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/qwertyuiop' #This going tobe applied for the first json,
'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/lkjahgfdsa' #this going to applied to second json]
}
def sendToDiscord():
directory = os.fsencode('./slack')
for counters, file in enumerate(os.listdir(directory)):
filename = os.fsdecode(file)
if filename.endswith(".json"):
with open('./slack/' + filename) as slackAttachment:
print(discordHooks.get('italian', [counters]))
所以基本上我想做的是我要第一个json Thrill
打印出列表中的第一个值https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/qwertyuiop
,当完成后,我们遍历第二个循环将打印出https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/lkjahgfdsa
多数民众赞成在其中,我稍后将在代码中应用json文件中包含值(我尚未编写任何代码),但重要的是,第一个json文件应具有来自Italian [0]的第一个webhook基本上。并且第二个json文件将具有第二个webhook意大利语[1]。
我希望现在情况更加清楚! :)
答案 0 :(得分:2)
counters
是一个整数,而您的dict的键是字符串(并且大多数是AFAICT的任意键),因此显然这不能按预期工作。
如果您根本不关心排序(如果目录内容和test
dict内容之间实际上没有真正的关系),则可以将dict的值用作列表:
test_list = list(test.values())
for i, fname in enumerate(os.listdir(...)):
print("i : {} - fname : {} - value : {}".format(i, fname, test_list[i]))
请注意,如果目录中的条目比字典中的条目多,这将导致崩溃。
如果订购很重要,那么您还有其他问题...
第一个是Python字典在3.7.x之前是无序的,因此,如果您想要一个适用于较早版本的Python的解决方案,则不能使用普通字典-您需要collections.OrderedDict
或仅使用普通字典(key, value)
元组列表(您可以从中重建字典:vals = [("foo": "xxx"), ("bar: "yyy")]; test = dict(vals)
)
第二个问题是os.listdir()
被明确记录为没有被排序(或者更确切地说,为“任意排序”),这意味着即使连续两次调用,您也不能依靠相同的顺序在同一过程中的同一路径上),除了最终手动对列表进行排序之外,您无能为力。
长话短说:如果目录的内容和数据之间应该存在任何关系,则必须以一种或另一种方式自己明确实现此关系。
编辑:鉴于您有更新的问题,正确的解决方案是反过来解决此问题:在python中配置url-> filename映射,然后从该映射中读取文件,即:
# We're going to need this to solve possible path issues
# (relying on the current working directory is a recipe for headaches)
# NB: we assume the json files are in _HERE/slack/)
_HERE = os.path.dirname(os.path.abspath(__file__))
discordHooks = {
# list of `(url, filename)` pairs
'italian':[
('https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/qwertyuiop', 'jsonfile1.json'),
('https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/lkjahgfdsa' , 'jsonfile2.js')
]
}
for url, filename in discordHooks["italian"]:
path = os.path.join(_HERE, "slack", filename)
if not os.path.exists(path):
# Don't know how you want to handle the case...
raise ValueError("file {} not found".format(path))
print("url: {} - path: {}".format(url, path))
答案 1 :(得分:0)
from pathlib import Path
def make_language_dict(thrill_hook: str, helloworld_hook: str):
return {
"Thrill": thrill_hook
"HelloWorld": helloworld_hook
}
discord_hooks = {
'swedish': make_language_dict(
thrill_hook='https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/ASDFDFGDSFGSDFG',
helloworld_hook='https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/EAAEFAEFAFlF'
),
'italian':make_language_dict(
thrill_hook='https://discordapp.com/api/webhooks/xxxxxxxxxxxxxx/qwertyuiop',
helloworld_hook='https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxx/lkjahgfdsa'
),
}
def send_to_discord(directory: Path = Path(r"./slack")):
for filepath in directory.glob("*.json"):
with open(filepath.resolve()) as slack_attachment:
for language in discord_hooks:
discord_hook = discord_hooks[language][filepath.stem]
print(discord_hook)
# Do stuff with the file and the discord_hook here...