Называние и запись разных файлов в цикле for (python) - PullRequest
0 голосов
/ 28 июня 2018

У меня есть то, что я считаю основной ошибкой 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

ошибка, предполагающая, что это неправильный способ создания, именования и записи файлов в цикле. Как правильно это сделать?

1 Ответ

0 голосов
/ 28 июня 2018

, если owner содержит косую черту, например, "foo / bar", то open сначала попытается перейти в каталог com_foo перед созданием файла bar.gexf. Если com_foo не существует, произойдет это исключение.

Одним из возможных решений является замена всех слешей в owner на менее нежелательный символ.

with open('com_{}.gexf'.format(owner.replace("/", "_")),'x') as f:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...