[英]Python Multiple filetype support with glob.glob
我正在嘗試使用glob.glob為多個文件類型提供支持。 我擁有的代碼應該獲取位於目錄'/ mnt / Test'中的擴展名為'.pdf','。xls'和'.xlsx'的文件,並在找到文件匹配后執行以下代碼。
當我將現有的for循環替換為
for filename in glob.glob("*.xlsx"):
print filename
它工作正常。
嘗試運行以下代碼時:
def main():
os.chdir("/mnt/Test")
extensions = ("*.xls", ".xlsx", ".pdf")
filename = []
for files in extensions:
filename.extend(glob.glob(files))
print filename
sys.stdout.flush()
doc_id, version = doc_placeholder(filename)
print 'doc_id:', doc_id, 'version:', version
workspace_upload(doc_id, version, filename)
print "%s has been found. Preparing next phase..." % filename
ftp_connection.cwd(remote_path)
fh = open(filename, 'rb')
ftp_connection.storbinary('STOR %s' % timestr + '_' + filename, fh)
fh.close()
send_email(filename)
我遇到以下錯誤:
Report /mnt/Test/fileTest.xlsx has been added.
[]
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/local/lib/python2.7/dist- packages/watchdog/observers/api.py", line 199, in run
self.dispatch_events(self.event_queue, self.timeout)
File "/usr/local/lib/python2.7/dist- packages/watchdog/observers/api.py", line 368, in dispatch_events
handler.dispatch(event)
File "/usr/local/lib/python2.7/dist-packages/watchdog/events.py", line 330, in dispatch
_method_map[event_type](event)
File "observe.py", line 14, in on_created
fero.main()
File "/home/tesuser/project-a/testing.py", line 129, in main
doc_id, version = doc_placeholder(filename)
File "/home/testuser/project-a/testing.py", line 58, in doc_placeholder
payload = {'documents':[{'document':{'name':os.path.splitext(filename)[0],'parentId':parent_id()}}]}
File "/usr/lib/python2.7/posixpath.py", line 105, in splitext
return genericpath._splitext(p, sep, altsep, extsep)
File "/usr/lib/python2.7/genericpath.py", line 91, in _splitext
sepIndex = p.rfind(sep)
AttributeError: 'list' object has no attribute 'rfind'
如何編輯上面的代碼來實現所需的功能?
預先感謝大家。 感謝幫助。
doc_placeholder
包括此片段os.path.splitext(filename)
。 假設filename
是您傳入的列表,則當您期望一個字符串時,已向os.path.splittext
提供了一個列表。
通過遍歷每個文件名而不是立即嘗試處理整個列表來解決此問題。
def main():
os.chdir("/mnt/Test")
extensions = ("*.xls", "*.xlsx", "*.pdf")
filenames = [] # made 'filename' plural to indicate it's a list
# building list of filenames moved to separate loop
for files in extensions:
filenames.extend(glob.glob(files))
# iterate over filenames
for filename in filenames:
print filename
sys.stdout.flush()
doc_id, version = doc_placeholder(filename)
print 'doc_id:', doc_id, 'version:', version
workspace_upload(doc_id, version, filename)
print "%s has been found. Preparing next phase..." % filename
ftp_connection.cwd(remote_path)
fh = open(filename, 'rb')
ftp_connection.storbinary('STOR %s' % timestr + '_' + filename, fh)
fh.close()
send_email(filename)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.