2015-11-28 13 views
5

Biorę Pythona w mojej uczelni i utknąłem z mojego bieżącego zadania. Powinniśmy pobrać 2 pliki i porównać je. Ja po prostu próbuje otworzyć pliki, więc można z nich korzystać, ale wciąż otrzymuję błąd "ValueError: embedded null character""ValueError: osadzony znak null" podczas używania open()

file1 = input("Enter the name of the first file: ") 
file1_open = open(file1) 
file1_content = file1_open.read() 

Co ten błąd oznacza?

+0

Gdzie są pliki pochodzące z? –

+0

Mój nauczyciel dodał pliki testerów, które będą używane podczas uruchamiania programu. Pierwszy plik w jednym z testerów, który daje mi błąd, to "Tests/4-test.txt" – Erica

+0

Masz wbudowany w ciąg łańcuch bajtowy, który nie będzie działał przy użyciu Pythona, musisz usunąć bajty/null . Z jakiego systemu operacyjnego korzystasz? –

Odpowiedz

2

Domyślnym kodowaniem plików dla Python 3.5 jest "utf-8".

Domyślne kodowanie plików dla systemu Windows jest czymś innym.

Jeśli zamierza otworzyć dwa pliki tekstowe, można spróbować to:

import locale 
locale.getdefaultlocale() 
file1 = input("Enter the name of the first file: ") 
file1_open = open(file1, encoding=locale.getdefaultlocale()[1]) 
file1_content = file1_open.read() 

powinna istnieć jakaś automatyczna detekcja w bibliotece standardowej.

przeciwnym razie można tworzyć własne:

def guess_encoding(csv_file): 
    """guess the encoding of the given file""" 
    import io 
    import locale 
    with io.open(csv_file, "rb") as f: 
     data = f.read(5) 
    if data.startswith(b"\xEF\xBB\xBF"): # UTF-8 with a "BOM" 
     return "utf-8-sig" 
    elif data.startswith(b"\xFF\xFE") or data.startswith(b"\xFE\xFF"): 
     return "utf-16" 
    else: # in Windows, guessing utf-8 doesn't work, so we have to try 
     try: 
      with io.open(csv_file, encoding="utf-8") as f: 
       preview = f.read(222222) 
       return "utf-8" 
     except: 
      return locale.getdefaultlocale()[1] 

a następnie

file1 = input("Enter the name of the first file: ") 
file1_open = open(file1, encoding=guess_encoding(file1)) 
file1_content = file1_open.read() 
+0

Nie mogę importować niczego do mojego programu – Erica

Powiązane problemy