免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4684 | 回复: 3
打印 上一主题 下一主题

请教:对于含有转义字符的参数,python程序应该如何接受和处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-25 22:12 |只看该作者 |倒序浏览
原因:
我有一行 2G 的数据需要处理,但是 sed 存在泄漏,导致程序崩溃。

解决方法:
用 python 实现 sed 功能;

困难:
python 传入包含转义字符的时候有问题,总是报错。
如果我最后一个参数写为:'\n',调试时发现传入的参数为 "\\n"

暂时没有从网络上找到相关资料,所以请教大家一个问题:
对于含有转义字符的参数,python程序应该如何接受和处理

附程序片段:
def sed(ori_f_obj, tar_f_obj, replaced_char, substitution_char):
    while True:
        d = ori_f_obj.read(8096);
        if not d:
            break;
        tar_f_obj.write(d.replace(replaced_char, substitution_char));

if __name__=="__main__":
    if len(sys.argv) < 5 or len(sys.argv) > 5:
        print("Error: There must be four arguments to be give and set");
        print("Usage: ./sed.py  ori_file_name  target_file_name  to_be_replaced_character  substitution_character");
        exit(1);
    ori_file_name = sys.argv[1];
    target_file_name = sys.argv[2];
    to_be_replaced_character = sys.argv[3];
    substitution_character = sys.argv[4];
    if os.path.exists(ori_file_name):
        ori_file_object = open(ori_file_name,"r");
        target_file_object = open(target_file_name,"w+");
        sed(ori_file_object,target_file_object,to_be_replaced_character,substitution_character);
        ori_file_object.close();
        target_file_object.close();
    print("Sed by Python ... Done!");

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
2 [报告]
发表于 2011-12-26 11:09 |只看该作者
如果是文本文件,用
for line in fp:
    do something

可以一行一行处理。

你每次读8096字节,万一要替换的东西正好被截断了,怎么办?

论坛徽章:
0
3 [报告]
发表于 2011-12-26 11:55 |只看该作者
noword2k 发表于 2011-12-26 11:09
如果是文本文件,用
for line in fp:
    do something

首先,我解释一下,我是做单个字符替换的(只替换文件中的单个字符),所以这样的读取方法没有任何问题。
对于单个字符来说,不存在你说的万一要替换的被截断。
这里只贴了部分代码,刚开始没有解释清楚,误导了你。

现在的关键点在于,如何将含有转义字符的字符串作为一个参数传入python程序

特别强调,是python程序的参数为转义字符,而不仅仅是函数的参数为转义字符。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
4 [报告]
发表于 2011-12-26 13:53 |只看该作者
本帖最后由 noword2k 于 2011-12-26 13:53 编辑

建议文件打开方式加上"b",用二进制方式打开。

转义字符串,  "some string".decode("string_escape")

另外,读取命令行参数的话,建议用argparse,超级好用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP