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

时间:2018-06-28 13:23:37

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

我有一个基本的python错误。我正在使用networkx模块构建多个图形,并且需要在不同的gexf文件(针对gephi)中写入其边列表。由于我必须多次执行这些操作,因此在float reihe(int n) { float sum = 0; float base = 1.0; for (int i = 1; i <= n; i++) { if ( i % 2 ) { sum += base/i; } else { sum -= base/i; } } return sum; } 循环中执行此操作,并且在写入文件时遇到错误。

对于数据框的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)

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

1 个答案:

答案 0 :(得分:1)

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

一种可能的解决方案是用不太令人反感的字符替换owner中的所有斜杠。

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