2016-10-10 47 views
2

ディレクトリにあるファイルの名前としてリストの要素を割り当てようとしていますが、これまでのところ、各ファイルの名前をディレクトリから復元してリストに返します。リストの要素をPythonでファイル名として割り当てる方法は?

def retrive(directory_path): 
    path_names = [] 
    for filename in sorted(glob.glob(os.path.join(directory_path, '*.pdf'))): 
     retrieved_files = filename.split('/')[-1] 
     path_names.append(retrieved_files) 
    print (path_names) 

リストで上記の関数が返す各ファイルの名前、次のように私は別のディレクトリにファイルを書いています:

path = os.path.join(new_dir_path, "list%d.txt" % i) 
    #This is the path of each new file: 
    #print(path) 
    with codecs.open(path, "w", encoding='utf8') as filename: 
     for item in [a_list]: 
      filename.write(item+"\n") 

は最後に、私の質問は:どのように私はの名前として割り当てることができます各ファイル、各要素path_names?、次の行のようなもの:

path = os.path.join(new_dir_path, "list%d.txt" % i) 

また、format()機能を使用しようとしました。しかし、私はまだ各ファイルに正しい名前を割り当てることはできません。

ここで完全なスクリプトです:

def transform_directoy(input_directory, output_directory):  
    import codecs, glob, os 
    from tika import parser 
    all_texts = [] 
    for filename in sorted(glob.glob(os.path.join(input_directory, '*.pdf'))): 
     parsed = parser.from_file(filename) 
     texts = parsed['content'] 
     all_texts.append(texts) 

    for i , a_list in enumerate(all_texts): 
     new_dir_path = output_directory 


     #print(new_dir_path) 
     path = os.path.join(new_dir_path, "list%d.txt" % i) 
     with codecs.open(path, "w", encoding='utf8') as filename: 
      for item in [a_list]: 
       filename.write(item+"\n")   

所望の出力は、各処理されたファイルの実際の名前で構成されますが。

+2

はなぜあなたをしている:OPはこれがあったこと全てだった場合、私はそうここに、このコードを書くだろうか尋ねましたあなたが望むだけのファイルを開くときには名前を付けますか? – TigerhawkT3

+0

なぜ、 'open()'の代わりに 'codecs.open()'を使用していますか? –

+0

助けを借りてくれてありがとう、私はそれらを書き換えて、異なるフォーマットで処理するので@JohnGordon – tumbleweed

答えて

1

あなたはほとんどそこにいる:更新されたコードサンプルに基づい

for path_name in path_names: 
    path = os.path.join(new_dir_path, "list%s.txt" % path_name) 
    #This is the path of each new file: 
    #print(path) 
    with codecs.open(path, "w", encoding='utf8') as f: 
     for item in [a_list]: 
      f.write(item+"\n") 

更新。ここでは異なるループを使用していますが、2つのループの間で処理をしない限り理想的ではありません。私はその構造を維持しようとしているので、コンテンツの各ブロックを元のファイル名に関連付ける必要があります。そのための最善の構造はdictであり、順序が重要な場合は、OrderedDictを使用します。さて、ファイル名をループするときには、OrderedDictの内容のペアで、新しいファイルタイプと一致するようにファイルの拡張子を変更する必要があります。幸いにも、pythonは、os.pathモジュールのファイル/パス操作用の素晴らしいユーティリティを持っています。 os.path.basenameはファイルからディレクトリを取り除くために使用でき、os.path.splitextはファイル名から拡張子を削除します。拡張子を付けずにファイル名を取得し、.txtを追加して新しいファイルタイプを指定するには、これらの両方を使用します。一緒にすべてを置く、我々が得る:

def transform_directoy(input_directory, output_directory):  
    import codecs, glob, os 
    from collections import OrderedDict 
    from tika import parser 
    all_texts = OrderedDict() 
    for filename in sorted(glob.glob(os.path.join(input_directory, '*.pdf'))): 
     parsed = parser.from_file(filename) 
     filename = os.path.basename(filename) 
     texts = parsed['content'] 
     all_texts[filename] = texts 

    for i, (original_filename, a_list) in enumerate(all_texts.items()): 
     new_filename, _ = os.path.splitext(original_filename) 
     new_filename += '.txt' 
     new_dir_path = output_directory 

     #print(new_dir_path) 
     path = os.path.join(new_dir_path, new_filename) 
     # Print out the name of the file we are processing 
     print('Transforming %s => %s' % (original_filename, path,)) 
     with codecs.open(path, "w", encoding='utf8') as filename: 
      for item in [a_list]: 
       filename.write(item+"\n") 

セカンド更新:

# move imports to top of file: PEP 8 
import codecs, glob, os 
from tika import parser 

def transform_directoy(input_directory, output_directory):  
    for filename in sorted(glob.glob(os.path.join(input_directory, '*.pdf'))): 
     parsed = parser.from_file(filename) 
     parsed_content = parsed['content'] 
     original_filename = os.path.basename(filename) 
     new_filename, _ = os.path.splitext(original_filename) 
     new_filename += '.txt' 
     path = os.path.join(output_directory, new_filename) 
     # Print out the name of the file we are processing 
     print('Transforming %s => %s' % (original_filename, path,)) 
     # no need for a second loop since we can piggy back off the first loop 
     with codecs.open(path, "w", encoding='utf8') as filename: 
      # No need for a for loop here since our list only has one item 
      filename.write(parsed_content) 
      filename.write("\n") 
+0

助けてくれてありがとう!しかし、私はファイルの元の名前を保持していない、また、私はそれらを書き換えるときに1つのファイルは、どのように進むのか考えていますか?ありがとう! – tumbleweed

+1

あなたの質問は文字通りでした: '最後に、私の質問は:各ファイルの名前、パス名の各要素をどのように割り当てることができますか?ということです。私は元のファイル名を保持したいと思っています。だから、質問を編集して、あなたが答えたい質問を正確に述べ、あなたの*全体の*コードを投稿してください。 – 2ps

+0

助けてくれてありがとう2ps私はすべてのスクリプトで質問を更新しました、ありがとう! – tumbleweed

関連する問題