2012-07-03 2 views
9

Я пытаюсь написать небольшую процедуру, в которой запись (добавление будет еще лучше) строки в файле с Python, например:Python IOError: Файл не открыт для записи, а глобальное имя 'w' не задано

def getNewNum(nlist): 
    newNum = '' 
    for i in nlist: 
     newNum += i+' ' 
    return newNum 

def writeDoc(st): 
    openfile = open("numbers.txt", w) 
    openfile.write(st) 

newLine = ["44", "299", "300"] 

writeDoc(getNewNum(newLine)) 

Но когда я запускаю это, я получаю ошибку:

openfile = open("numbers.txt", w) 
NameError: global name 'w' is not defined 

Если я уронить "W" paremeter, я получаю эту другую ошибку:

line 9, in writeDoc 
    openfile.write(st) 
IOError: File not open for writing 

Я точно следую (надеюсь), что есть here.

То же самое происходит, когда я пытаюсь добавить новую строку. Как я могу это исправить?

+1

Ваша функция 'getNewNum' должна быть просто'. '.join (newLine) '. –

ответ

23

Проблема в вызове open() в writeDoc() неверна.

openfile = open("numbers.txt", w) 
          ^

The w потребности иметь (пару одинарные или двойные) кавычки вокруг него, то есть,

openfile = open("numbers.txt", "w") 
           ^

Цитирую из режима файла docs Re:

The first argument is a string containing the filename. The second argument is another string containing a few characters describing the way in which the file will be used.

Re: «Если я сброшу пареметр« w », я получаю следующую ошибку: ..IOError: файл не открыт для записи«

Это связано с тем, что если нет Файловый режим указан по умолчанию: 'r' ead, что объясняет сообщение о том, что файл не открыт для «записи», он открыт для «чтения».

См. Этот документ Python для получения дополнительной информации о Reading/Writing files и для спецификаций действительного режима.

+0

D'oh! Не могу поверить, что я использовал Python так долго, и я до сих пор делаю глупые ошибки (и затем должен искать то, что происходит не так. Я закончил тем, что полностью отключил режим). – ArtOfWarfare

2

Можно добавить данные в файл, но в настоящее время вы пытаетесь установить параметр для записи в файл, который переопределит существующий файл.

The first argument is a string containing the filename. The second argument is another string containing a few characters describing the way in which the file will be used. mode can be 'r' when the file will only be read, 'w' for only writing (an existing file with the same name will be erased), and 'a' opens the file for appending; any data written to the file is automatically added to the end. 'r+' opens the file for both reading and writing. The mode argument is optional; 'r' will be assumed if it’s omitted.

Кроме того, ваши результаты реализации в методе open() ищет параметр объявлен как w. Однако вы хотите передать строковое значение, чтобы указать параметр добавления, который указан в кавычках.

openfile = open("numbers.txt", "a") 
Смежные вопросы