免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 白水月
打印 上一主题 下一主题

求助:尝试修改文件中的部分内容出现问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-02-18 09:10 |只看该作者
原帖由 luffy.deng 于 2009-2-17 20:35 发表
lz不正是要修改old变量然后缓存到文件里?
“或者像berkeleydb,都需要对库定期压缩的,不会因为删除数据即时重写主要数据的”
这个我没搞明白你是什么意思,可否再解释一下?我这里主要使用oracle好像没有你 ...

我知道您很有学识,但是需要扯到那么远吗!看楼主提问就知道楼主和我一样都是新人,他只想简单的实现,替换后不重写 类似插入的功能
你说的数据库我还没学到不理解 不过pickle我的理解是
比如他的一个txt文件 可以有 a,b,c,d4个变量 或者说 他的一个txt文件是由4个其他txt文件组成的
然后通过代码 自动的将这4个变量整合为一个整体 比如说用a或者a+模式 按照顺序 让a,b,c,d整合成一个文件 那么楼主想修改的内容 如果是abcd中任何一个都不会影想顺序 但是这么做仅仅是省人力而已
本质还是一个重写的过程啊。

楼主是想问 python file模块里是否就没有‘插入’这个功能,不是指替换,或者谁给写一个
就这么简单啦

就好比小学生只想知道汽车能不能飞,或者什么样的东西能飞,
你去和他扯万有引力定律 牛顿定律,阿基米德定律 然后和他扯宇宙飞船可以飞,宇宙是什么样的,什么东西在宇宙中都会怎么样
他只想知道 1汽车不能飞 2飞机可以飞那么简单

论坛徽章:
0
22 [报告]
发表于 2009-02-18 09:58 |只看该作者
唉  del

[ 本帖最后由 luffy.deng 于 2009-2-18 10:57 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2009-02-18 10:47 |只看该作者
import os
import pickle as p
a=('1111\000\n')
b=("2222")
c=("3333")
d=[a,b,c]
if os.path.existe("text.txt"):
    os.remove("text.txt")
f=file("text.txt","a+")
for i in xrange(len(d)):
    f.write(d[i])
f.close()

[[i] 本帖最后由 zhenglxd 于 2009-2-18 10:49 编辑 [/i]]

论坛徽章:
0
24 [报告]
发表于 2009-02-18 10:53 |只看该作者
原帖由 zhenglxd 于 2009-2-18 10:47 发表
import os
import pickle as p
a=('1111\000\n')
b=("2222")
c=("3333")
d=[a,b,c]
if os.path.existe("text.txt"):
    os.remove("text.txt")
f=file("text.txt","a+")
for i in xrange(len(d)):
  ...

算了

[ 本帖最后由 luffy.deng 于 2009-2-18 11:08 编辑 ]

论坛徽章:
0
25 [报告]
发表于 2009-02-18 11:07 |只看该作者
原帖由 luffy.deng 于 2009-2-18 10:53 发表

这都写了些啥。直接open("text.txt","w"不完了。你看懂我在22楼写的么?
你打算怎么从文件里恢复变量 a b c d的值?

您好 我看的懂您的意思,但是你那个修改是用python打印出来的,他写入文本里的是另外一种格式
楼主的需求是在文本里改,不是说你打印出来的
还有 请您不要老用 哎 哎的语气助词   有什么就说出来 我们是菜鸟 不能理解也很正常
还有 哎后面的del我也没听懂什么意思
能具体点吗?每个人的习惯是不一样的
我这个具体就是 a,b,c,d 4个变量 是文本里要被写入的东西 把他们放到一个list里
来决定写入的顺序
对a,b,c,d任何做更改 最后写入文本都会发生变化
因为是r+模式所以每次更改删除旧的替换成新的

论坛徽章:
0
26 [报告]
发表于 2009-02-18 13:53 |只看该作者
不管用什么都实现不了吧。
文件是顺序存的,你多出来的哪里放啊?
只能读出来再写。

论坛徽章:
0
27 [报告]
发表于 2009-02-18 17:36 |只看该作者
我没怎么看前面的讨论,但是有一点前面有人说了,只有定长的才有可能实现楼主的想法。信息的存储可以分别随机存储和结构存储。结构存储是有格式的,象数据库中的数据,因此可以针对这种结构进行定位,查找,删除,替换,而不用将全部数据读到内存中去。但是我们通常使用的都是随机存储的,就是字符串按顺序放在一起,因些没有结构,所以替换只能是相同长度内容的替换,如果内容不同,需要由用户来进行内容的移动。编辑器基本上都是整个读到内存中去的。

论坛徽章:
0
28 [报告]
发表于 2009-02-18 19:48 |只看该作者
大的话试下mmap

论坛徽章:
0
29 [报告]
发表于 2009-02-18 22:36 |只看该作者
很抱歉,这么迟才回复。
不过也很高兴,有这么多热心的朋友
的拔刀相助。

不过pickle我不知道是什么东西来的。
(不好意思,我是新手来的,刚学python
一个星期,很多东西都不知道)
而数据库呢,只是用C#实际操作过SQL,至于
python怎么连还不知道, ^_^'

论坛徽章:
0
30 [报告]
发表于 2009-02-18 22:44 |只看该作者
原帖由 DQP 于 2009-2-17 00:02 发表
你好 白水月
对于非定长纪录通常都是才用读出来再写进去的方式
如果你担心 内存消耗问题那么边读边写的方式, 读一点写一点,不需要在内存中保存全部的内容。
将新的内容写到一个新的文件中去然后再将原文件 ...



如果这样的话,我觉得我的另一种方法可能效率高点。
方法:
不写到一个新的文件里面,
而是在修改之前先预读后面的内容(因为可以知道修改后和修改前的长度,
所以可以精确知道需要预读多少)。
这样在修改之后,就将预读出来的重新写入,一直到文件的结尾。
不过这样还是会遇到我前面说到的问题:如果要修改的地方在文件开头,
而文件又超长。
这样感觉后面做了多余的事情。

不过还是谢谢你啊。

其实我觉得
zhenglxd
圣骑士


最理解我的想法,
我只是一个想知道python file 里面有没有
可是实现插入功能的模块的新手而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP