Python IOError: Fișierul nu este deschis pentru scriere și numele global ‘w’ nu este definit (Programare, Python, Io, Eroare De Sintaxă)

craftApprentice a intrebat.

Încerc să scriu o mică procedură care să scrie (append ar fi și mai bine) o linie într-un fișier cu Python, cam așa:

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))

Dar când o execut, primesc eroarea:

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

Dacă renunț la paremetrul „w”, primesc această altă eroare:

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

Urmăresc exact (sper) ceea ce este aici.

Același lucru se întâmplă când încerc să adaug noua linie. Cum pot să rezolv asta?

Comentarii

  • Al dumneavoastră getNewNum ar trebui să fie doar ' '.join(newLine). –  > Por Daniel Roseman.
2 răspunsuri
Levon

Problema este în open() din writeDoc() care specificația modului de fișier nu este corectă.

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

Adresa w trebuie să aibă (o pereche de ghilimele simple sau duble) în jurul său, adică,

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

Pentru a cita din docs re file mode:

Primul argument este un șir de caractere care conține numele de fișier. Al doilea argument este un alt șir de caractere care conține câteva caractere care descriu modul în care va fi utilizat fișierul.

Re: „Dacă renunț la paremetrul „w”, primesc această altă eroare: ..IOError: File not open for writing”

Acest lucru se datorează faptului că dacă nu există este specificat modul de fișier, valoarea implicită este 'r'ead, ceea ce explică mesajul referitor la faptul că fișierul nu este deschis pentru „scriere”, ci a fost deschis pentru „citire”.

Consultați acest document Python pentru mai multe informații despre Citirea/scrierea fișierelor și pentru specificațiile de mod valabile.

Comentarii

  • D’oh! Nu-mi vine să cred că folosesc Python de atâta timp și încă mai fac gafe prostești ca aceasta (și apoi trebuie să caut ce nu merge bine. Am sfârșit prin a omite în întregime modul). –  > Por ArtOfWarfare.
RobB

Este posibil să adăugați date la un fișier, dar în prezent încercați să setați opțiunea de a scrie în fișier, care va anula un fișier existent.

Primul argument este un șir de caractere care conține numele fișierului. Al doilea argument este un alt șir de caractere care conține câteva caractere care descriu modul în care va fi utilizat fișierul. mode poate fi „r” atunci când fișierul va fi doar citit, „w” pentru doar scriere (un fișier existent cu același nume va fi șters), iar „a” deschide fișierul pentru adăugare; orice date scrise în fișier sunt adăugate automat la sfârșit. „r+” deschide fișierul atât pentru citire, cât și pentru scriere. Argumentul „mode” este opțional; în cazul în care este omis, se va presupune că „r”.

În plus, implementarea dvs. open() să caute un parametru declarat ca w. Cu toate acestea, ceea ce doriți este să treceți valoarea șirului de caractere pentru a indica opțiunea de adăugare, care este indicată prin a între ghilimele.

openfile = open("numbers.txt", "a")