在for循环中命名和写入不同的文件(python)

在for循环中命名和写入不同的文件(python),python,python-3.x,for-loop,file-io,networkx,Python,Python 3.x,For Loop,File Io,Networkx,我认为这是一个基本的python错误。我正在使用networkx模块构建几个图形,并且我需要在不同的gexf文件(对于gephi)中编写它们的edgelists。因为我必须多次执行这些操作,所以我在for循环中执行这些操作,在写入文件时出错 我需要为数据帧的owner列的每个元素创建一个图(因此,需要一个不同的输出文件) for owner in df.owner.unique(): sdf=df[df['owner']==owner] sG=nx.Graph() sG.

我认为这是一个基本的python错误。我正在使用networkx模块构建几个图形,并且我需要在不同的gexf文件(对于gephi)中编写它们的edgelists。因为我必须多次执行这些操作,所以我在
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)

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

如果
owner
包含斜杠,例如“foo/bar”,那么
open
将首先尝试导航到目录
com\u foo
,然后再创建文件
bar.gexf
。如果
com\u foo
不存在,则会发生此异常

一种可能的解决方案是将
owner
中的所有斜杠替换为不太令人讨厌的字符

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

发生异常时,
owner
的值是多少?胡乱猜测:如果它包含斜杠,例如“foo/bar”,那么open将首先尝试导航到目录
com\u foo
,然后再创建文件
bar.gexf
。如果com_foo不存在,那么这个异常就会发生。是的,你是对的,有一个斜杠,我完全错过了。我会改变这个,看看它是否有效。好的,问题解决了。非常感谢,如果你愿意,请写一个合适的答案,这样我就可以接受:)
with open('com_{}.gexf'.format(owner.replace("/", "_")),'x') as f: