2012-06-15 64 views
1

讓我首先說我從來沒有用Python編碼過。遍歷整個文件夾,提取文件名而不用擴展名在Python中指定爲API變量名

我需要進行一次API調用,以將一堆文件從本地機器上傳到服務器。在服務器上,我想獲取文件的文件名,並將字符串分配給一個名爲'identifier'的變量。

import requests 
import os 
url = 'http://someplace' 
folder = 'path/to/folder/' 
for card in os.listdir(folder): 
    data = {'identifier': PyFile_Name(PyObject *p), 'type': 'Inventory Card'} 
    files = {'card': open(os.path.join(folder, card), 'rb')} 
    requests.post(url, data=data, files=files, auth=('username', 'pass')) 

我是對的嗎?

+2

看起來你在混合Python和Python C API;後者只在編碼C中的Python擴展時需要.. –

+2

你覺得'PyFile_Name(PyObject * p)'會做什麼? –

+0

@iarsmans我發現它[這裏](http://docs.python.org/c-api/file.html?highlight=file_name#PyFile_Name)...他們描述它的方式,它聽起來像它會返回文件名沒有擴展名。我不知道* p會做什麼,但可能它是一個Python變量(類似於Javascript中的(e)),你會提出一個替代方案嗎? – joshdcomp

回答

1

您應該使用

import requests 
import os 
url = 'http://someplace' 
folder = 'path/to/folder/' 
for card in os.listdir(folder): 
    data = {'identifier': '.'.join(card.split('.')[:-1]), 'type': 'Inventory Card'} 
    files = {'card': open(os.path.join(folder, card), 'rb')} 
    requests.post(url, data=data, files=files, auth=('username', 'pass')) 

'.'.join(card.split('.')[:-1])需要的文件名(在card),將其分解成文件名的一段分離的組件,拒絕列表[:-1]的最後一個元素,並重新加入文件名減去擴展名。

使用此語法處理多個時期,如foo.20120613.txt

編輯:

,列出我的~/tmp目錄中的文件的一個例子...

[[email protected] tmp]$ ls 
howto regex_trial.xml soln.py 
[[email protected] tmp]$ 
[[email protected] tmp]$ python 
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> for card in os.listdir('./'): 
...  print "card:", card 
...  print " base_name:", '.'.join(card.split('.')[:-1]) 
... 
card: howto 
base_name: 
card: regex_trial.xml 
base_name: regex_trial 
card: soln.py 
base_name: soln 
>>> 

注意howto是目錄...如果在此路徑中有一個目錄,則需要在腳本中放置邏輯以跳過目錄。

+0

我給了這個鏡頭...並且它看起來並不像它的工作。我不確定它是否是API(仍在開發中)或者如果是代碼......我會繼續測試。我可以保存''。'。join(card.split('。')[: - 1])'作爲變量並將其作爲參數傳遞給'data'嗎? – joshdcomp

+0

是的,你可以將信息保存到一個臨時變量中...另請參見上面的編輯,以顯示這是如何工作的明確示例... –

+0

您的第一個示例非常有效。 API還沒有配置爲處理'標識符',所以我把我的頭撞在牆上。一旦我改變爲另一個數據屬性,它就工作了。 – joshdcomp

相關問題