这里要读一个xml文件,并把数据写入csv。
python代码
python 3.8
def read_xml3(): doc = etree.parse("D:/tmp/bbc_text/bbc-text.xml") root=doc.getroot() news_items =[] with open("D:/tmp/bbc_text/bbc_text_python.csv", "w", encoding="utf-8") as f: f.write("category,text\n") for news_item_xml in root.getchildren(): f.write(news_item_xml.attrib['category']) f.write(",") f.write(news_item_xml.text.replace('"','""')) f.write("\n") f.flush() f.close()1
2
3
4
5
6
7
8
9
10
11
12
13
C#代码
public class BbcNewsItem { public string Category { get; set; } public string Text { get; set; } } public static class XmlReader { public static void Read() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("D:/tmp/bbc_text/bbc-text.xml"); List newsItems = new List(); foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes) { XmlElement e = (XmlElement)node; BbcNewsItem newsItem = new BbcNewsItem(); newsItem.Category = e.GetAttribute("category"); newsItem.Text = e.InnerText; newsItems.Add(newsItem); } using (var writer = new StreamWriter("D:/tmp/bbc_text/bbc_text_cshape.csv")) { using (var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csvWriter.Configuration.HasHeaderRecord = true; csvWriter.Configuration.AutoMap(); csvWriter.WriteRecords(newsItems); writer.Flush(); writer.Close(); } } } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
测试后所用时间为
235.8ms ± 19.8
不过,我后来发现,我用的是.net core 3.1。因为.net core是跨平台的,所以,并不是windows的机器码。应该是MSIL
于是改成了.net framework 4.5。
57.6 ms ± 10.8
C++代码
C++ 14
#include
#include
#include
#include "pugixml.hpp"
using namespace std;
void findAndReplaceAll(std::string& data, std::string toSearch, std::string replaceStr)
{ // Get the first occurrence size_t pos = data.find(toSearch); // Repeat till end is reached while (pos != std::string::npos) { // Replace this occurrence of Sub String data.replace(pos, toSearch.size(), replaceStr); // Get the next occurrence from the current position pos = data.find(toSearch, pos + replaceStr.size()); }
}
int main()
{ auto start = chrono::system_clock::now(); std::cout << "Hello World!\n"; pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file("D:/tmp/bbc_text/bbc-text.xml"); if (!result) return -1; ofstream csv_file; csv_file.open("D:/tmp/bbc_text/bbc_text_cpp.csv"); csv_file << "category,text" << endl; auto children = doc.child("bbc").children(); for (auto child : children) { string category = child.attribute("category").value(); string text = child.text().as_string(); findAndReplaceAll(text, "\"", "\"\""); text = "\"" + text + "\""; csv_file << category << "," << text << endl; } csv_file.flush(); csv_file.close(); auto end = chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end - start; auto millis = std::chrono::duration_cast<:chrono::milliseconds>(elapsed_seconds).count(); std::cout << millis << "\n"; string c; std::cin >>c;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
C++的运行时间是34.8 ms ± 1.6
结论
语言
运行时间
c++
34.8 ms ± 1.6
python
38.5 ms ± 4.88
.net framework
57.6 ms ± 10.8
golang
171.5 ms ± 12.6
.net core
235.8ms ± 19.8
java
258.6 ms ± 15.0
.Net Core运行时间是python的2倍。
.Net Framework运行时间是python的1/2倍。
.Net Framework运行时间是.Net Core的1/2倍。
python确实比我想象的快了很多,我以为python应该垫底的。
不过,我还是不看好python开发运用程序。类型不安全。和c#,c++相比,编程的时候,自动提示很差。其实编程效率并不高。这种编程效率也低,运行速度也慢的语言,不适合用来做运用程序。
当然,谁都没有c++快。
文章来源: blog.csdn.net,作者:有数可据,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/juwikuang/article/details/110409781