小编M_b*_*eeb的帖子

使用Python Requests库上传大型XML文件

我正在尝试用Python和请求库替换curl.使用curl,我可以使用curl -T选项将单个XML文件上载到REST服务器.我无法对请求库执行相同的操作.

基本方案有效:

payload = '<person test="10"><first>Carl</first><last>Sagan</last></person>'
headers = {'content-type': 'application/xml'}
r = requests.put(url, data=payload, headers=headers, auth=HTTPDigestAuth("*", "*"))
Run Code Online (Sandbox Code Playgroud)

当我通过打开XML文件将有效负载更改为更大的字符串时,.put方法挂起(我使用编解码器库来获取正确的unicode字符串).例如,使用66KB文件:

xmlfile = codecs.open('trb-1996-219.xml', 'r', 'utf-8')
headers = {'content-type': 'application/xml'}
content = xmlfile.read()
r = requests.put(url, data=content, headers=headers, auth=HTTPDigestAuth("*", "*"))
Run Code Online (Sandbox Code Playgroud)

我一直在研究使用multipart选项(文件),但服务器似乎不喜欢这样.

所以我想知道是否有办法模拟Python请求库中的curl -T行为.

更新1:程序挂起textmate,但在命令行上抛出UnicodeEncodeError错误.似乎一定是问题所在.所以问题是:有没有办法将unicode字符串发送到带有请求库的服务器?

更新2:由于Martijn Pieters的评论,UnicodeEncodeError消失了,但是出现了一个新问题.使用文字(ASCII)XML字符串,日志记录显示以下行:

2012-11-11 15:55:05,154 INFO Starting new HTTP connection (1): my.ip.address
2012-11-11 15:55:05,294 DEBUG "PUT /v1/documents?uri=/example/test.xml HTTP/1.1" 401 211
2012-11-11 15:55:05,430 DEBUG "PUT /v1/documents?uri=/example/test.xml HTTP/1.1" 201 0
Run Code Online (Sandbox Code Playgroud)

似乎服务器总是反弹第一次认证尝试(?)但接着第二次认证尝试.

使用传递给数据的文件对象(open('trb-1996-219.xml','rb')),日志文件显示:

2012-11-11 15:50:54,309 INFO Starting new HTTP connection (1): my.ip.address …
Run Code Online (Sandbox Code Playgroud)

python xml python-requests

5
推荐指数
1
解决办法
5318
查看次数

Marklogic内容泵(MLCP)以静默方式忽略以下划线开头的文件

我正在尝试导入文档集合,其中一些文件以下划线开头.似乎Marklogic mlcp 8.0.4正在静默地跳过这些文件,即使Marklogic本身似乎对这样的文件名没有问题.

这是我正在使用的mlcp命令:

mlcp-8.0-4/bin/mlcp.sh import -host localhost -port 8012 -username xxxxx -password xxxx -mode local -input_file_path/Users/test/Downloads/tempfolder33/-output_uri_replace"^.*tempfolder33,''"

其中mlcp一直忽略"/Users/test/Downloads/tempfolder33/schemas/bwb/_manifest.xml"等文件名.

有关如何解决此问题的任何想法?

marklogic mlcp

3
推荐指数
1
解决办法
189
查看次数

XQuery中的Marklogic日期比较,有或没有索引

我需要使用Marklogic 8按日期(上周,上个月等)过滤文档.该数据库包含130万个XML文档.

文件看起来像这样:

<work datum_gegenereerd="2015-06-10" gegenereerd="2015-06-10T14:28:48" label="gmb-2015-12000">
 ...
Run Code Online (Sandbox Code Playgroud)

我在work/@ datum_gegenereerd(标量类型日期)上创建了一个范围元素属性索引.

以下查询有效,但速度很慢(3秒):

xquery version "1.0-ml";
for $a in //work
where xs:date($a/@datum_gegenereerd) > current-date()-   5*xs:dayTimeDuration('P1D')
return
<hit>{base-uri($a)}</hit>
Run Code Online (Sandbox Code Playgroud)

经过大量的实验,我发现通过从where语句中删除xs:date cast,我可以将性能降低到0.02秒.

xquery version "1.0-ml";
for $a in //work
where $a/@datum_gegenereerd > current-date()-   5*xs:dayTimeDuration('P1D')
return
<hit>{base-uri($a)}</hit>
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?


更新:
当我删除属性范围索引时,第二个变体的性能也会下降到3秒以上.并重新创建索引可以提升性能.这让我想知道如何阅读下面的David的声明,没有办法使用普通xquery的自定义索引.(顺便说一下:查询返回1267个XML文档,在一个可能的450000个文档中,根元素在135万个文档的总数据库中工作)
更新2:
我搞砸了0.02秒的性能指标.但它在查询控制台中非常快.在3个版本中,cts-search似乎要快一点.

marklogic

3
推荐指数
1
解决办法
624
查看次数

标签 统计

marklogic ×2

mlcp ×1

python ×1

python-requests ×1

xml ×1