免费注册 查看新帖 |

Chinaunix

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

python 读一行就马上删除一行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-27 19:23 |只看该作者 |倒序浏览
python如何实现读取文件后,在源文件中删除这一行呢
for line in file:
   #do something
   在源文件中删除这一行
请指教

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2014-02-27 20:28 |只看该作者
Win不清楚,在Linux/UNIX不要有此幻想,按部就班的读取旧文件-->过滤-->写新文件-->备份旧文件-->新文件重命名。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
3 [报告]
发表于 2014-02-28 08:43 |只看该作者
什么OS也没这本事.

虽然你看到有些命令好些可以, 但其实, 它只不过是表现给你看的可以. 其实, 它在后面也是做了很多事的.

论坛徽章:
0
4 [报告]
发表于 2014-02-28 09:15 |只看该作者
给个简单的参考:

  1. #delline.py
  2. import fileinput, string
  3. for line in fileinput.input(inplace=True):
  4.    mark = 'the end of line'
  5.    if line.endswith(mark):
  6.        print
  7.    else:
  8.        print("%-40s" %line)
复制代码
使用方法python delline.py filename
fileinput模块用来遍历文件,inplace=True参数指定原地修改文件,不生成副本。

以上是个思路,仅供参考。你可以到标准库里面去研究下fileinput模块。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
5 [报告]
发表于 2014-02-28 10:17 |只看该作者
我想楼主只是要结果看起来是原地修改的方法,真实过程应该无所谓,那么用fileinput是可行的。

论坛徽章:
0
6 [报告]
发表于 2014-02-28 14:04 |只看该作者
如果要在原处修改文件,fileinput应该是惟一的选择。注意fileinput是支持上下文管理器的。
具体代码如下

  1. import fileinput

  2. with fileinput("yourfile", inplace=True) as f:
  3.     for line in f:
  4.         print("")
复制代码
因为你是一行一行读取,所以虽然遍历一次之后把每一行都变空了,但是换行符仍然在。
原处修改文件只是fileinput的用法之一,关于 fileinput 的使用可以参考我的文章Python fileinput 使用总结

论坛徽章:
0
7 [报告]
发表于 2014-02-28 14:06 |只看该作者
还有,上面说“什么OS都没这本事”的,最好不要随便把话说死。。。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
8 [报告]
发表于 2014-02-28 14:20 |只看该作者
“什么OS都没这本事”现在是成立的,请问有什么OS可以直接把磁盘当内存玩?fileinput只是封装了一个接口,内部依然是传统的方法。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
9 [报告]
发表于 2014-02-28 14:22 |只看该作者
回复 7# laike9m

噢? 那请教 fileinput 具体是怎样实现这个操作?
   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
10 [报告]
发表于 2014-02-28 15:01 |只看该作者
刚刚测试了一下, fileinput 确实是"直接"修改了文件中的行, 不过, 文件的inode变了, 说明在修改的时候, 应该是使用了临时文件之类的方法. 并不是真正意义上的直接修改.

  1. [user@host 14:56 /tmp/test_python]
  2. $ ls -li
  3. total 8
  4. 131 -rw-rw-r-- 1 user user  24 Feb 28 14:56 file1
  5. 132 -rw-rw-r-- 1 user user 137 Feb 28 14:56 test1.py

  6. [user@host 14:56 /tmp/test_python]
  7. $ cat file1
  8. line1
  9. line2
  10. line3
  11. line4

  12. [user@host 14:56 /tmp/test_python]
  13. $ cat test1.py
  14. #!/usr/bin/env python

  15. import fileinput

  16. for line1 in fileinput.input("file1", inplace=True):
  17.     line1 = line1 + 'xxoo'
  18.     print line1

  19. [user@host 14:56 /tmp/test_python]
  20. $ python test1.py

  21. [user@host 14:56 /tmp/test_python]
  22. $ ls -li
  23. total 8
  24. 130 -rw-rw-r-- 1 user user  44 Feb 28 14:56 file1
  25. 132 -rw-rw-r-- 1 user user 137 Feb 28 14:56 test1.py

  26. [user@host 14:56 /tmp/test_python]
  27. $ cat file1
  28. line1
  29. xxoo
  30. line2
  31. xxoo
  32. line3
  33. xxoo
  34. line4
  35. xxoo

  36. [user@host 14:57 /tmp/test_python]
  37. $
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP