在编写一种备份应用程序时,我对Windows上的文件复制性能进行了评估.
我有几个问题,我想知道你的意见.
谢谢!
卢卡斯.
问题:
与1 GiB文件相比,复制10 GiB文件时为什么性能会慢得多?
为什么shutil.copyfile这么慢?
为什么win32file.CopyFileEx这么慢?这可能是因为标志win32file.COPY_FILE_RESTARTABLE?但是,它不接受int 1000作为标志(COPY_FILE_NO_BUFFERING),建议用于大型文件:http: //msdn.microsoft.com/en-us/library/aa363852%28VS.85%29.aspx
使用空的ProgressRoutine似乎对完全不使用ProgressRoutine没有影响.
是否有一种替代的,更好的复制文件的方式,但也获得进度更新?
1 GiB和10 GiB文件的结果:
test_file_size 1082.1 MiB 10216.7 MiB
METHOD SPEED SPEED
robocopy.exe 111.0 MiB/s 75.4 MiB/s
cmd.exe /c copy 95.5 MiB/s 60.5 MiB/s
shutil.copyfile 51.0 MiB/s 29.4 MiB/s
win32api.CopyFile 104.8 MiB/s 74.2 MiB/s
win32file.CopyFile 108.2 MiB/s 73.4 MiB/s
win32file.CopyFileEx A 14.0 MiB/s 13.8 MiB/s
win32file.CopyFileEx B 14.6 MiB/s 14.9 MiB/s
Run Code Online (Sandbox Code Playgroud)
测试环境:
Python:
ActivePython 2.7.0.2 (ActiveState Software Inc.) based on
Python 2.7 (r27:82500, Aug 23 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Python 3.3 将 XML 文件转换为 YAML。这是我的代码:
#! /etc/python3
test_filename_input = './reference-conversions/wikipedia-example.xml'
test_filename_output = 'wikipedia-example_xml_read-as-binary.yaml'
file_object = open( test_filename_input, 'rb')
data_in = file_object.read()
file_object.close()
from xml.dom.minidom import parseString
document_object = parseString( data_in)
import yaml
stream = open( test_filename_output, 'w')
yaml.dump( document_object, stream)
stream.close()
Run Code Online (Sandbox Code Playgroud)
作为参考,我使用了这里的 XML 文件:
<person>
<firstName>John</firstName>
<lastName>Smith</lastName>
<age>25</age>
<address>
<streetAddress>21 2nd Street</streetAddress>
<city>New York</city>
<state>NY</state>
<postalCode>10021</postalCode>
</address>
<phoneNumbers>
<phoneNumber type="home">212 555-1234</phoneNumber>
<phoneNumber type="fax">646 555-4567</phoneNumber>
</phoneNumbers>
<gender>
<type>male</type>
</gender>
</person>
Run Code Online (Sandbox Code Playgroud)
这应该导致这样的事情:
---
firstName: John
lastName: Smith
age: …
Run Code Online (Sandbox Code Playgroud) 我是 PostgreSQL 的新手,正在使用 9.4 版。我有一个表,其中收集的测量值作为字符串,需要使用始终是最新的内容(例如 VIEW)将其转换为一种 PIVOT 表。
此外,一些值需要转换,例如乘以 1000,如下面的“sensor3”示例所示。
源表:
CREATE TABLE source (
id bigint NOT NULL,
name character varying(255),
"timestamp" timestamp without time zone,
value character varying(32672),
CONSTRAINT source_pkey PRIMARY KEY (id)
);
INSERT INTO source VALUES
(15,'sensor2','2015-01-03 22:02:05.872','88.4')
, (16,'foo27' ,'2015-01-03 22:02:10.887','-3.755')
, (17,'sensor1','2015-01-03 22:02:10.887','1.1704')
, (18,'foo27' ,'2015-01-03 22:02:50.825','-1.4')
, (19,'bar_18' ,'2015-01-03 22:02:50.833','545.43')
, (20,'foo27' ,'2015-01-03 22:02:50.935','-2.87')
, (21,'sensor3','2015-01-03 22:02:51.044','6.56');
Run Code Online (Sandbox Code Playgroud)
源表结果:
| id | name | timestamp | value |
|----+-----------+---------------------------+----------|
| 15 | …
Run Code Online (Sandbox Code Playgroud)