搜索数据文件:python与c ++编码

时间:2011-05-26 23:50:22

标签: c++ python search

首先,这不是作业! :p我想做的是:

给定保存在桌面上的数据文件(文本或数字),即我希望能够搜索该文件并仅提取我想要的数据并将其打印到屏幕上。我可能想用它做其他的事情,但我不知道有什么选择。

另外,python或c ++会更合适。我对python并不熟悉,自从我拿起c ++以来已经好几年了但是我听说python效率更高,虽然这个程序的效率可能也许不是很大,我听说python更容易理解。

示例,代码,模板(< - 会很棒)

全部谢谢!

3 个答案:

答案 0 :(得分:3)

如果不知道如何指定所需的数据,这有点难以回答。

如果你可以使用正则表达式指定必要的数据,那么Python可能会同样有效,并且编写起来会更快一些 - 但是你可以更容易地使用像grep这样的东西。

如果需要更多的处理来确定要显示的数据,Python 可能开始变慢 - 只要Python部分是,它就可以非常快大部分是一个相当“薄”的外壳,大部分繁重的工作都是由各种图书馆完成的。如果你在Python本身进行严肃/重要的处理,它可能会慢得多。

如果你用C ++写作,你会或多或少地得到相反的情况 - 只要你合理地小心,很可能性能不会成为问题。真正的问题是生产你想要的东西需要多少工作。如果你不知道你正在寻找什么数据,你想如何显示它等等,那么几乎不可能猜到这一点。

基于评论进行编辑:类似Data = ####的模式听起来像是正则表达式的经典案例,grep可以正常工作。

这也是Python可能做得非常好的事情,但是如果你决定在C ++中做自己的事情,它可能看起来像这样:

#include <iostream>
#include <string>
#include <regex>
#include <fstream>

int main(int argc, char **argv) { 
    if (argc < 2) {
        std::cerr << "Usage: searched <filename>\n";
        return 1;
    }

    std::ifstream in(argv[1]);
    std::string line;
    std::regex pat("Data = [0-9]+");

    while (std::getline(line, in))
        if (std::regex_search(line, pat))
            std::cout << line << "\n";
    return 0;
}

这假设您正在寻找行中某处发生的Data = #模式。如果您只想将其视为整个行,请将regex_search更改为regex_match

另一个假设是您正在使用包含标准正则表达式类的相对较新的编译器。这是VS 2010和gcc 4.6的情况(如果我没记错的话),但是一些较旧的编译器可能会将其命名为std::tr1::regex,而一些较旧的编译器仍然不会使用它。

答案 1 :(得分:1)

C ++会更快(也许,如果你写得好),但是,它会更难,但更容易启动,因为你知道它。

Python需要一些时间来习惯,它可能会慢一点,但是,一旦你学习了语言,就会更容易。

这是一个非常容易解决的问题,所以,你选择的语言并不重要。

如果您喜欢GUI,请查看GUI库。

答案 2 :(得分:-3)

Python可以更好地完成这项任务:

for line in file("path/to/file.txt", "rb"):
    print line

等效的C ++更为复杂。