遍历文件夹,提取文件名,不带扩展名,并在Python中指定为API变量名

遍历文件夹,提取文件名,不带扩展名,并在Python中指定为API变量名,python,api,iteration,Python,Api,Iteration,首先,我要说,我从未用Python编写过代码 我需要进行API调用,以便将一组文件从本地计算机上载到服务器。在服务器上,我希望获取文件的文件名,并将不带扩展名的字符串分配给名为“identifier”的变量 import requests import os url = 'http://someplace' folder = 'path/to/folder/' for card in os.listdir(folder): data = {'identifier': PyFile_Nam

首先,我要说,我从未用Python编写过代码

我需要进行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'))
我这样做对吗?

您应该使用

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
目录中列出文件的示例

[mpenning@Bucksnort tmp]$ ls
howto  regex_trial.xml  soln.py
[mpenning@Bucksnort tmp]$
[mpenning@Bucksnort 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
是一个目录。。。如果此路径中有目录,则需要在脚本中添加逻辑以跳过该目录。

您应该使用

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
目录中列出文件的示例

[mpenning@Bucksnort tmp]$ ls
howto  regex_trial.xml  soln.py
[mpenning@Bucksnort tmp]$
[mpenning@Bucksnort 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
是一个目录。。。如果此路径中有目录,则需要在脚本中添加逻辑以跳过该目录。

看起来您是在混合Python和Python C API;后者仅在用C编写Python扩展名时才需要。您认为
PyFile\u Name(PyObject*p)
会有什么作用?@iarsmans我找到了它……按照他们描述的方式,它听起来像是返回没有扩展名的文件名。我不知道*p会做什么…也许它是一个Python变量(类似于(e)在Javascript中。你能推荐一个替代方案吗?我认为你误解了*p在函数定义中的含义。请参阅此处以了解args和kwargs的解释:你知道URL的
c-api
部分指的是什么吗?你是如何做到的?看起来你是在混合Python和Python c api;后者只需要在用C编写Python扩展名时,你认为
PyFile_Name(PyObject*p)
会做什么?@iarsmans我发现了它……按照他们描述的方式,它听起来会返回没有扩展名的文件名。但我不知道*p会做什么……也许它是一个Python变量(类似于(e)在Javascript中。你能推荐一个替代方案吗?我想你误解了*p在函数定义中的含义。请参阅此处了解args和kwargs的解释:你知道URL的
c-api
部分指的是什么吗?你是怎么做到的?我尝试了一下……它似乎不起作用。我不确定它是否是正确的API(仍在开发中)或者如果是代码…我将继续测试。我是否可以保存
'..join(card.split('.')[:-1])
作为变量,并将其作为参数传递给
数据
?是的,您可以将信息保存到临时变量中…也可以查看我上面的编辑,以显示此操作的明确示例…您的第一个示例工作得非常出色。API尚未配置为处理“标识符”,因此我将头撞在墙上。它成功了ce我更改为另一个数据属性。我尝试了一下……但它似乎不起作用。我不确定它是API(仍在开发中)还是代码……我将继续测试。我是否可以保存
'..join(card.split(')[:-1])
作为变量,并将其作为参数传递给
数据
?是的,您可以将信息保存到临时变量中…也可以查看我上面的编辑,以显示此操作的明确示例…您的第一个示例工作得非常出色。API尚未配置为处理“标识符”,因此我将头撞在墙上。它成功了ce I更改为另一个数据属性。