【问题标题】:Naming and writing different files in a for loop (python)在 for 循环中命名和编写不同的文件(python)
【发布时间】:2018-06-28 13:23:36
【问题描述】:

我有一个我认为是基本的 python 错误。我正在使用 networkx 模块构建几个图表,我需要将它们的边缘列表写入不同的 gexf 文件(对于 gephi)。由于我必须多次执行这些操作,因此我在 for 循环中执行此操作,并且在写入文件时出现错误。

我需要一个数据框owner 列的每个元素的图表(因此需要一个不同的输出文件)。

for owner in df.owner.unique():
    sdf=df[df['owner']==owner]
    sG=nx.Graph()
    sG.add_nodes_from(sdf['col1'])
    sG.add_nodes_from(sdf['col2'])
    i=0
    while i < len(sdf):
        sG.add_edge(sdf.iloc[i,0],sdf.iloc[i,1], weight=sdf.iloc[i,2])
        i+=1
    with open('com_{}.gexf'.format(owner),'x') as f:
        nx.write_gexf(sG,f)

在第一次迭代中,我得到了一个

FileNotFoundError: [Errno 2] No such file or directory

错误,表明这不是循环创建、命名和写入文件的正确方法。这样做的正确方法是什么?

【问题讨论】:

  • 异常发生时owner的值是多少?大胆猜测:如果它包含一个斜线,例如“foo/bar”,那么 open 将首先尝试导航到目录com_foo,然后再创建文件bar.gexf。如果 com_foo 不存在,则会发生此异常。
  • 是的,你是对的,有一个斜线,我完全错过了它。我会改变它,看看它是否有效。
  • 好的,问题解决了。非常感谢,如果您愿意,请写一个正确的答案,以便我接受:)

标签: python python-3.x for-loop file-io networkx


【解决方案1】:

如果owner 包含斜线,例如“foo/bar”,则open 将首先尝试导航到目录com_foo,然后再创建文件bar.gexf。如果com_foo不存在,那么就会出现这个异常。

一种可能的解决方案是将owner 中的所有斜线替换为不那么令人反感的字符。

with open('com_{}.gexf'.format(owner.replace("/", "_")),'x') as f:

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2019-06-27
    • 2016-01-04
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 2021-04-17
    相关资源
    最近更新 更多