2017-05-12 5 views
0

csvファイルから作成されたリストに基づいて、あるディレクトリから別のディレクトリにファイルをコピーしようとしています。今私はいくつかの列を持っているcsvファイルを持っているが、私は必要な一つの列を抽出し、 'imaglst'の下でそれを保存することができた。
リストは、画像 '.tif'拡張子のリストです。私は入力フォルダ(すべての画像と余分なもの)と出力フォルダ(ここでは 'imaglst'で指定された画像をコピーしたい)を持っています。csvファイルから作成されたリストに基づいてあるディレクトリから別のディレクトリにファイルをコピーする

以下

は、現在のコードです:

import os 
import glob 
import pandas 
import shutil 


cwd = os.getcwd() 
path = cwd 
extension = 'csv' 
result = [i for i in glob.glob('*.{}'.format(extension))] 
print result 

colnames = ['X' ,'Y' ,'ATTR_1',' ATTR_2',' ATTR_3 ','ATTR_4' ,'ELEVATION'] 
data = pandas.read_csv(result[0],names=colnames, delimiter=r"\s+") 
imaglst = data['ATTR_1'] 
print imaglst[1:len(imaglst)] 

dir_src = raw_input('enter the full image folder location :') 
dir_dst = raw_input('enter the full output folder location :') 

for i in imaglst[1:len(imaglst)]: 
    for filename in imaglst.filter(os.listdir(dir_src), imaglst[i]): 
     shutil.copy(dir_src, dir_dst) 



print "---------------------------------------------------------------------------------" 
print "Process competed" 

それは私が

print imaglst[1:len(imaglst)]

1  17251_0002_RGB 
2  17251_0004_RGB 
3  17251_0006_RGB 
4  17251_0008_RGB 
5  17251_0010_RGB 
6  17251_0012_RGB 
7  17251_0014_RGB 
8  17251_0016_RGB 
9  17251_0018_RGB 
10  17251_0020_RGB 
11  17251_0022_RGB 
12  17251_0024_RGB 
13  17251_0026_RGB 
14  17251_0028_RGB 
15  17251_0030_RGB 
16  17251_0032_RGB 
17  17251_0034_RGB 
18  17251_0036_RGB 
19  17251_0038_RGB 
20  17251_0040_RGB 
21  17251_0042_RGB 
22  17251_0044_RGB 
23  17251_0046_RGB 
24  17251_0048_RGB 
25  17251_0050_RGB 
26  17251_0052_RGB 
27  17251_0054_RGB 
28  17251_0056_RGB 
29  17251_0058_RGB 
30  17251_0060_RGB 

206 17005_0114_RGB 
207 17005_0116_RGB 
208 17005_0118_RGB 
209 17005_0120_RGB 
210 17005_0122_RGB 
211 17005_0124_RGB 
212 17005_0126_RGB 
213 17005_0128_RGB 
214 17005_0130_RGB 
215 17005_0132_RGB 
216 17005_0134_RGB 
217 17005_0136_RGB 
218 17005_0138_RGB 
219 17005_0140_RGB 
220 17005_0142_RGB 
221 17005_0144_RGB 
222 17005_0146_RGB 
223 17005_0148_RGB 
224 17005_0150_RGB 
225 17005_0152_RGB 
226 17005_0154_RGB 
227 17005_0156_RGB 
228 17005_0158_RGB 
229 17005_0160_RGB 
230 17005_0162_RGB 
231 17005_0164_RGB 
232 17005_0166_RGB 
233 17005_0168_RGB 
234 17005_0170_RGB 
235 17005_0172_RGB 

を印刷するとき今、私は私が何かをしないのですが、ただ何を知らない、あらゆることを知って節約リストアドバイスや回避策が評価されます。私はそれを実行すると、私はエラー、次の取得:

KeyError: '17251_0002_RGB'

だから、私は拡張子「.tifファイルを」拾っていない可能性がありますが、私は確認していないことをそれを理解できるもの。

答えて

1

問題はあなたのforループの最後です。

Pythonループは実際にはそれぞれのループ用です。各繰り返しでiimaglstからの実際の値です。あなたはそれをリストに戻すためのカウンターとして使用しようとしていますが、その値を使用するだけです。

また、shutil.copyを直接呼び出してもファイル名は参照されません。私はdir_srcとファイル名を結合することを意味します。

最後に、リストをスライスするとき、エンドポイントを単なる長さにする必要はありません。

だから、一緒にすべてを置く:

for i in imaglst[1:]: 
    for filename in imaglst.filter(os.listdir(dir_src), i): 
     shutil.copy(os.path.join(dir_src, filename), dir_dest) 
+0

のおかげで、これはまだファイルをコピーしますか?私はちょうど結果を見るためにあなたのスクリプトを試してみました。 "TypeError:キーワード引数' items'、 'like'、または' regex'は相互に排他的です。そのアイデアは、リストを通って "dir_src"から同じ名前のイメージを見つけ、 "dir_src"からそれらをコピーし、それらを指定される "dir_dst"に貼り付けることです。 –

+0

完全なトレースバックを投稿する必要があります。それは残念なことに何も知らないパンダとの間違いのようです。 –

+0

トレースバック(最新の呼び出しの最後): ':/ドキュメント/ RD/Height_teamプロジェクト/ image_locator_copier.py J'、WDIR = RUNFILE(中 ファイル ""、1行目、 'J:/ Documents/RD/Height_team project') ファイルC:¥Users¥edwinp¥AppData¥Local¥Continuum¥Anaconda2¥lib¥site-packages¥spyder¥utils¥site¥sitecustomize.py、880行、実行ファイル内 execfile(ファイル名、名前空間) ファイル "C:¥Users¥edwinp¥AppData¥Local¥Continuum¥Anaconda2¥lib¥site-packages¥spyder¥utils¥site¥sitecustomize.py"、87行目ファイル "J:/ Documents/RD/Height_team project/image_locator_copier.py"、 exec(コンパイル(scripttext、ファイル名、 'exec')、glob、loc) –

0

は、これはそれを動作させるように見えました!私はに変更

for i in imaglst[1:]: 
    for filename in imaglst.filter(os.listdir(dir_src), i): 
     shutil.copy(os.path.join(dir_src, filename), dir_dst) 

:私の前のエントリから

今素晴らしい作品
for i in imaglst[1:]: 
    shutil.copy(os.path.join(dir_src, i+ '.tif'), dir_dst) 

は、それはCSVファイルから作成し、「拡張子を持つ画像を検索するリストを通過した.tif 'を指定し、指定した場所フォルダにコピーします。

ヘルプ@ダニエルローズマン

関連する問題