2013-08-30 18 views
66

Ta funkcja nie działa i powoduje zgłoszenie błędu. Czy muszę zmienić jakiekolwiek argumenty lub parametry?Błąd podczas tworzenia nowego pliku tekstowego z pythonem?

import sys 

def write(): 
    print('Creating new text file') 

    name = input('Enter name of text file: ')+'.txt' # Name of text file coerced with +.txt 

    try: 
     file = open(name,'r+') # Trying to create a new file or open one 
     file.close() 

    except: 
     print('Something went wrong! Can\'t tell what?') 
     sys.exit(0) # quit Python 

write() 
+0

Pisząc pytanie, zawsze należy stwierdzić, * co * nie działa. Czy jest błąd składni? Czy to się psuje? Czy coś robi, ale nie to, co zamierzałeś? Najlepiej, abyśmy uzyskali oczekiwany rezultat i rzeczywisty wynik. "Nie działa" jest zbyt ogólnikowe. – chepner

+13

Pozbądź się tego szkodliwego bloku "wyjątków", który tylko przeszkadza ci dokładnie wiedzieć, co poszło nie tak. –

+0

+1 @brunodesthuilliers! To, co ma na myśli, to nie pisz takich ogólnych bloków. Jeśli nie masz pewności, jakie są wyjątki, usuń obsługę wyjątków i przetestuj, przynajmniej dowiesz się, co jest nie tak. – 0xc0de

Odpowiedz

110

Jeśli plik nie istnieje, open(name,'r+') zakończy się niepowodzeniem.

Można użyć open(name, 'w'), który tworzy plik, jeśli plik nie istnieje, ale spowoduje obcięcie istniejącego pliku. Można użyć open(name, 'a'); to utworzy plik, jeśli plik nie istnieje, ale nie skróci istniejącego pliku.

+2

Ani" w "ani" a "nie tworzy nowego pliku dla mnie. – KI4JGT

+0

@ KI4JGT, Czy pojawił się błąd? – falsetru

+0

Głupi mnie nie dodałem do mojej strony katalogu Desktop, więc siedziałem tam, nie mając części ścieżki do pliku. . . – KI4JGT

0

Można użyć open(name, 'a')

Jednak, gdy wpiszesz nazwę pliku, użyj cudzysłowu po obu stronach, w przeciwnym razie ".txt" nie może zostać dodany do nazwa_pliku

+2

Wygląda na to, że poprzednia odpowiedź już wspomniano open (nazwa, "a"), więc byłoby lepiej po prostu dodać ostatnią linię jako komentarz – mc110

+5

"Odwrócone przecinki"? Masz na myśli * pojedyncze cytaty *? Python nie dba o to, czy wpisujesz ciąg znaków w pojedyncze cudzysłowy lub podwójne cudzysłowy. Ma znaczenie tylko wtedy, gdy ciąg zawiera pasujący separator; zamknięcie go w innym rodzaju może uratować konieczność ucieczki z zamkniętej postaci. –

3

Działa to dobrze, ale zamiast

name = input('Enter name of text file: ')+'.txt' 

należy użyć

name = raw_input('Enter name of text file: ')+'.txt' 

wraz z

open(name,'a') or open(name,'w') 
+7

Pytanie jest oznaczone jako 'python-3.x', w którym' raw_input' nie jest dostępny. – falsetru

+10

Tag 'python-3.x' został dodany po tej odpowiedzi –

5

zamiast korzystania spróbować z wyjątkiem bloków, można użyć, jeśli inny

tego nie wykona, jeśli plik nie istnieje, otwarty (nazwa, „r +”)

if os.path.exists('location\filename.txt'): 
    print "File exists" 

else: 
    open("location\filename.txt", 'w') 

'w' tworzy plik, jeśli jej nie Exis

1
import sys 

def write(): 
    print('Creating new text file') 

    name = raw_input('Enter name of text file: ')+'.txt' # Name of text file coerced with +.txt 

    try: 
     file = open(name,'a') # Trying to create a new file or open one 
     file.close() 

    except: 
     print('Something went wrong! Can\'t tell what?') 
     sys.exit(0) # quit Python 

write() 

będzie to wor k obietnica :)

+1

Czy to dodaje coś, co nie istniało już w 2 letnich odpowiedziach powyżej? –

+0

Zmienił on 'name = input()' na 'name = raw_input()'. Oczywiście, jest to przestarzałe. – Musixauce3000

2

Można os.system funkcję dla uproszczenia:

import os 
os.system("touch filename.extension") 

To wywołuje terminal systemu, aby wykonać zadanie.

+5

Jedną z najlepszych rzeczy na temat Pythona jest stdlib abstrahuje od OS specyficzne wywołania narzędzia, takie jak dotyk ... najlepiej, aby uniknąć czegoś takiego za wszelką cenę – f0ster

6

Poniższy skrypt będzie używać do tworzenia wszelkiego rodzaju pliku, z danych wprowadzonych przez użytkownika jako przedłużenie

import sys 
def create(): 
    print("creating new file") 
    name=raw_input ("enter the name of file:") 
    extension=raw_input ("enter extension of file:") 
    try: 
     name=name+"."+extension 
     file=open(name,'a') 

     file.close() 
    except: 
      print("error occured") 
      sys.exit(0) 

create() 
+0

Dzięki za odpowiedź, ale niestety nie działa dla mnie, jak "wystąpił błąd" !! –

+0

Nie śledząc PEP. Używanie różnych wcięć. Niepoprawnie obsługa wyjątku. – Desprit

Powiązane problemy