2016-06-16 23 views
0

フォルダ内の複数のテキストファイルを読みたいと思います。私はos.listdir()を使って自分のフォルダ内のすべてのファイルを取得しています。私はテキストファイルを読むためにopenを使用していて、ファイルを書き込むために書き込みます。ただし、コードを実行するとエラーが発生します。 ここにコードを添付しました。エラー:そのようなファイルやディレクトリはありません: 'satu.txt'

import os 
infilename = os.listdir("C:\Python27\input") 
for filename in infilename: 
    f = open(filename, "r") 
    data = f.read() 
    f.close() 
+0

あなたのスクリプトはどこにありますか?どのように実行しますか?あなたは相対パスが間違っている可能性があります – dazedconfused

+0

私はスクリプトをPythonフォルダの中に置きます。私はPythonシェルを使用して実行します。私がfilenameを印刷すると、ファイルの名前が表示されますが、読むことはできません。 \t印刷ファイル名\t satu.txt –

+0

のような。 –

答えて

0

os.listdirだけのファイル名を返します、あなたはそれを見つけるためにopenために、ディレクトリ名を指定して、ファイル名を結合する必要があります。

import os 

infilename = os.listdir(r'C:\Python27\input') 
for filename in infilename: 
    f = open(os.path.join(r'C:\Python27\input', filename), 'r') 
    data = f.read() 
    f.close() 

あなたは、文字列で\を使用している場合は、生の文字列を使用する必要があります。したがって、\nなどの文字は文字通り解釈され、解釈されません。文字列の先頭にあるr'は、それを生の文字列としてマークします(つまり、Pythonはそれを文字通り取ります)。

+0

私はすでにこのコードを使用してフォルダ内のすべてのファイルを読み書きできます。なぜ結果が1つのファイルしか保存しないのか分かりますか?これは古いファイルを新しいファイルで置き換えます。 –

2

pythonスクリプトが同じディレクトリにない限り、このエラーが発生します。

ファイル名だけでなく、ファイルのフルパスを参照する必要があります。

import os 

indir = "C:\Python27\input" 

for filename in os.listdir(indir): 
    fullpath = os.path.join(indir,filename) 
    with open(fullpath, "r") as f: 
     data = f.read() 
0

ここで問題となるのは、os.listdirは、そのディレクトリ内のファイルのみを返します。名前のみです。動作させるには、ファイル名の前にパスを追加する必要があります。

import os 
import sys 

drive = os.path.splitdrive(sys.executable)[0] 
drive = os.path.join(drive, "Python27") 
drive = os.path.join(drive, "input") 
infilename = os.listdir(drive) 
for filename in infilename: 
    f = open(os.path.join(drive, filename), "r") 
    data = f.read() 
    f.close() 
+0

satu2.txtファイルパスを構築するときは、必ず代わりに '+'のos.path.join' 'を使用:この、inFileNameはでファイル名の –

0
import os 
path = "C:\\Python27\\input" 
infilename = os.listdir(path) 
for filename in infilename: 
    print(path + "\\"+ filename) 
    f = open(path + "\\" + filename, "r") 
    data = f.read() 
    f.close() 
関連する問題