2015-11-28 247 views
5

我在學院學習python,但我堅持使用我當前的任務。我們應該採取2個文件並進行比較。我只是試圖打開文件,這樣我可以使用他們,但我不斷收到錯誤"ValueError: embedded null character"當使用open()時出現「ValueError:embedded null character」

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

這個錯誤是什麼意思?

+0

哪裏文件來自哪裏? –

+0

我的老師在運行程序時添加了要使用的測試儀文件。其中一個測試人員給我的錯誤的第一個文件是「Tests/4-test.txt」 – Erica

+0

你有一個空字節嵌入在字符串中不會使用python,你需要刪除空字節/ s 。你在使用什麼操作系統? –

回答

2

Python 3.5文件的缺省編碼是'utf-8'。

用於Windows的文件的默認編碼往往是別的。

如果你打算開兩個文本文件,可以試試這個:

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

應該有標準庫的一些自動檢測。

否則你就可以創造自己的:

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] 

然後

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

我不允許將任何東西導入到我的程序中 – Erica

相關問題