簡體   English   中英

使用部分名稱的python在目錄中查找文件

[英]Find a file in a directory using python by partial name

我有一個包含數十萬個文件的目錄。

它們都遵循以下格式:

datetime_fileid_metadata_collect.txt

一個特定的示例如下所示:

201405052359559_0002230255_35702088_collect88.txt

我正在嘗試編寫一個腳本,該腳本可以拉出並復制單個文件,而我所提供的只是文件ID的列表。

例如,我有一個包含此內容的文本文檔fileids.txt

fileids.txt
0002230255
0001627237
0001023000

這是我到目前為止編寫的示例腳本。 file1結果不斷返回[]

import os
import re, glob, shutil
base_dir = 'c:/stuff/tub_0_data/'
destination = 'c:/files_goes_here'
os.chdir(base_dir)
text_file = open('c:/stuff/fileids.txt', 'r')
file_ids = text_file.readlines()
#file_ids = [stripped for stripped in (line.strip() for line in text_file.readlines()) if stripped]
for ids in file_ids:
    id1 = ids.rstrip()
    print 'file id = ',str(id1)
    file1 = glob.glob('*' + str(id1) + '*')
    print str(file1)
    if file1 != []:
        shutil.copy(base_dir + file1, destination)

我知道我還不完全了解glob或正則表達式。 如果要基於文件名的特定字符串查找文件,該怎么辦?

編輯:

glob.glob('*' + stuff '*') 

用於在文件名中查找內容。 問題是不刪除行距。

text_file.readlines()讀取整行,包括結尾的“ \\ n”。 嘗試剝離它。 以下內容將刪除換行符並刪除空白:

file_ids = [line.strip() for line in text_file if not line.isspace()]

您的問題可能是行距,可能已經得到解決,但是我認為您可以對代碼進行一些清理。 誠然,除非您是更大代碼的一部分,否則我認為不需要import osimport sys

像下面這樣的東西已經足夠好了。

碼:

import glob
import shutil

base_dir = "C:/Downloads/TestOne/"
dest_dir = "C:/Downloads/TestTwo/"

with open("blah.txt", "rb") as ofile:
    lines = [line.strip() for line in ofile.readlines()]
    for line in lines:
        print "File ID to Process: {}".format(line)
        pattern_ = base_dir + "*" + str(line) + "*"
        print pattern_
        file_ = glob.glob(pattern_)
        print str(file_[0])
        shutil.copy(file_[0], dest_dir)
        print "{} copied.".format(file_[0])

輸出:

File ID to Process: 123456
C:/Downloads/TestOne/*123456*
C:/Downloads/TestOne\foobar_123456_spam.txt
C:/Downloads/TestOne\foobar_123456_spam.txt copied.
[Finished in 0.4s]

glob是一項相當昂貴的操作。 最好在開始時列出文件,然后再進行匹配,並在匹配時進行復制。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM