2015-12-13 56 views
1

我有一個任務來編寫一個Python腳本,它「檢測文件是否可讀」。檢測無效文件輸入,Python

我堅持我應該運行哪些異常。假設輸入文件是一個文本文件,其擴展名爲*.txt

我應該提出什麼例外?我懷疑應該有多個。目前,我有:

with open('example_file.txt") as textfile: 
     if not textfile.lower().endswith('.txt'): 
      raise argparse.ArgumentTypeError(
       'Not a text file! Argument filename must be of type *.txt') 
     return textfile 

但是,只檢查文件擴展名。我還能檢查什麼? Python中文件I/O的標準是什麼?

+0

可讀性是什麼意思?這是否意味着文件存在?這是否意味着該文件只包含可打印的字符(如ascii的)?這是否意味着您具有從文件讀取的適當權限? – Jon

+0

此外,擴展名不會影響python讀取文件的能力。 – Jon

+0

爲什麼csv文件必須具有.csv擴展名? –

回答

3

要檢查文件是否存在

import os.path 
if os.path.exists('example_file.txt'): 
    print('it exists!') 

除此之外,成功open荷蘭國際集團的文件將證明可讀性。如果失敗,內置open會引發IOError異常。故障可能會發生的原因不止一個,所以我們必須檢查它是否失敗,原因是可讀性:

import errno 
try: 
    textfile = open('example_file.txt', 'r') 
    textfile.close() 
    print("file is readable") 
except IOError as e: 
    if e.errno == errno.EACCES: 
     print("file exists, but isn't readable") 
    elif e.errno == errno.ENOENT: 
     print("files isn't readable because it isn't there") 

relevant section of the docs on file permissions.請注意,調用open氣餒之前使用的os.access檢查可讀性。

+0

打開文件並不意味着它是可讀的。 –

+0

@PadraicCunningham如果我可以用「r」模式打開一個文件,這意味着它是可讀的。權限檢查在您打開文件時完成。 (這顯然不意味着該文件的內容是有效的或可以由我的程序解釋。) –

+0

@SebastianRiese,是的,這是一個要求,文件必須是文本文件,你是說打開文件意味着它是? –