-1

私はフォルダ内のすべてのファイルの種類を列挙するために使用するスクリプトがあります。Pythonの:OSErrorの:[errnoを22]無効な引数:「* .TXT」

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sys 
import argparse 
import magic 
import os 

# Argparse starts here 
parser = argparse.ArgumentParser()        
parser.add_argument('-input', dest='input',help="input one or more files",nargs='+',metavar=None)       
args = parser.parse_args() 

for files in args.input: 
    if magic.from_file(files,mime=True) == "text/plain": 
     print (files, "=" , magic.from_file(files,mime=True)) 

を、それはかなりうまく動作しますとき、私は、入力ファイル:

enter image description here

場合でも、I入力二つのファイル:

enter image description here

ではなく、私が入力ALLファイルとき:

enter image description here

エラーは言う:

Traceback (most recent call last): 
    File "Test.py", line 15, in <module> 
    if magic.from_file(files,mime=True) == "text/plain": 
    File "C:\Users\FrancescoM\AppData\Local\Programs\Python\Python36-32\lib\site-packages\magic\magic.py", line 135, in from_file 
    return m.from_file(filename) 
    File "C:\Users\FrancescoM\AppData\Local\Programs\Python\Python36-32\lib\site-packages\magic\magic.py", line 85, in from_file 
    with open(filename): 
OSError: [Errno 22] Invalid argument: '*.txt' 

しかし*.txtはまさに私が入力したいものです。私もどんなファイルでも入力したいです*.*

これはpython-magicに関連する問題ですか、ファイルの入力方法の問題ですか?

+1

「* .txt」というファイルを開こうとすると意味がありません。すべてのファイルをループしますか?そのために複数のオープンを実行する必要があります。 –

答えて

1

*のようなものを使用する場合は、ファイルを「グロブ」する必要があります。グロビングが多くの場所で起こりうるため、これは混乱する可能性があります。私は使用しているシェルに慣れていませんが、bashを使用していた場合は、の前にglobを実行し、の前にPythonが渡されます。つまり、* .txtが実際に何かと一致する場合、bashはそれをファイルのリストで置き換え、そのリストを別の引数としてPythonに渡します。 Pythonで任意の数の引数を処理するのはあなたの仕事です(おそらくargparseを使用します)。 * .txtが何かにマッチしない場合、展開されず、Pythonは* .txtを見るので、エラーとして処理する必要があります。

ここでは、グロビングが起こっていないように見えます。これは、あなたのシェルが一致するものがないか、シェルがグロビングしていないことを意味します。グロビングしない場合は、globモジュールを使用してPythonでグロビングを実行できます。通常、globbingはシェルによって行われるものです。

+1

ありがとうございました。解決策はWindows 10で 'bash'を使用することでした。これはbu' CMD'を処理できないためです。 –

0

*.txtというファイルを開こうとすると意味がありません。 openは、複数のファイルをワイルドカードで開くことをサポートしていません。

あなたはすべてのファイルをループにしたい場合は、複数を実行する必要がディレクトリが空のリストを返しますglob.glob、間違っている場合は、その一致したファイル名

import glob 
for fexp in glob.glob(filename): 
    with open(fexp) as f: 
     # do something with the opened file 
     pass 

ノートを返すようにglob.globを使用して、そのために開きます。

関連する問題