2012-05-13 2 views
1

Согласно всем источникам, которые я прочитал, метод open создает файл или перезаписывает имя с существующим именем. Однако я пытаюсь использовать его, и я получаю сообщение об ошибке:Почему моя функция записи не создает файл?

File not found - newlist.txt (Access is denied) 
I/O operation failed. 

Я попытался прочитать файл и не смог. Вы уверены, что файл существует? Если он существует, вы указали правильный каталог/папку?

def getIngredients(path, basename): 
    ingredient = [] 
    filename = path + '\\' + basename 
    file = open(filename, "r") 
    for item in file: 
    if item.find("name") > -1: 
     startindex = item.find("name") + 5 
     endindex = item.find("<//name>") - 7 
     ingredients = item[startindex:endindex] 
     ingredient.append(ingredients) 

    del ingredient[0] 
    del ingredient[4] 


    for item in ingredient: 
    printNow(item) 

    file2 = open('newlist.txt', 'w+') 

    for item in ingredient: 
    file2.write("%s \n" % item) 

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

+0

Вы находитесь в окружении posix? \\ черта нечетна ... не уверен, что вы там делаете. Вероятно, это должно быть «/» правильно? –

+0

это на JES (Jython Environment for Students) забыл упомянуть, что может быть и почему. Двойная косая часть кода была предоставлена ​​лектором, поэтому не совсем уверен в этом. его вторая открытая функция, которая не работает для меня также – user1390754

+0

[Это может помочь.] (http://www.penzilla.net/tutorials/python/fileio/) или [здесь] (http://stackoverflow.com/questions/1466000/Python-открытой встроенной-функции разности-между-мод-aaww-и-R). Кроме того, мне было бы любопытно, если у вас есть доступ на запись к местоположению, в котором выполняется файл Python. Может быть, вы можете попробовать абсолютный путь для открытия newlist.txt, чтобы убедиться? – matthewnreid

ответ

0

Вы уверены, что каталог, в котором вы пытаетесь создать папку, существует?

Если это НЕ ... Тогда ОС не сможет создать файл.

+0

возможно, но как мне указать местоположение? theres нет параметра в открытой функции, которую вы можете задать, чтобы указать, где сделать файл, который я думаю. – user1390754

+0

Вы можете напрямую поместить имя файла. Например open ("D: /Code/test.txt", 'r') – user907629

+0

Хотя. Используйте open ("d: //code//test.txt", "w") – Andrew

0

Это похоже на проблему с разрешениями.

либо каталог не существует, либо у вашего пользователя нет разрешений на запись в этот каталог.

+0

Да, я тоже так думаю. вы случайно знаете, как предоставить разрешение? я не совсем уверен, в какой каталог он записывается, но по умолчанию я считаю, что он записывает в каталог JES. – user1390754

+0

вы можете использовать 'chmod +777 'folder name''. Это сделает доступную папку удобочитаемой + writtable + executable –

+0

@ user1390754: Обратите внимание, что может быть запрещено делать 'chmod + 777', и что вообще опасно делать это изменение режима в любом случае, поскольку оно предоставляет разрешение на запись (включая удаление) * другим пользователям. – EOL

1

Похоже, что у вас нет доступа на запись к текущему рабочему каталогу. Вы можете получить рабочий каталог Python с import os; print os.getcwd().

Затем вы должны проверить, есть ли у вас доступ на запись в этом каталоге. Это может быть сделано в Python с

import os 
cwd = os.getcwd() 
print "Write access granted to current directory", cwd, '>', os.access(cwd, os.W_OK) 

Если вы не получаете False (нет доступа на запись), то вы должны поместить ваш newfile.txt файл где-то еще (возможно, в path + '/newfile.txt'?).

0

Я предполагаю, что возможные проблемы могут быть:

1) Вы проходите путь и базовое имя в качестве параметров. Если вы передаете параметры как строки, то вы можете получить эту проблему:

Например:

def getIngredients(path, basename): 
    ingredient = [] 
    filename = path + '\\' + basename 


getIngredients("D","newlist.txt") 

Если передают параметры указанных выше способом, это означает, что вы делаете это

filename = "D" + "\\" + "newlist.txt" 

2) Вы не указали двоеточие (:) после пути + в имени файла.

3) Возможно, файл не существует.