Python论坛  - 讨论区

标题:[python-chinese] windows和unix下文本文件的tell()函数的返回值问题

2005年06月29日 星期三 13:17

amingsc amingsc at 163.com
Wed Jun 29 13:17:26 HKT 2005

我是想为文本数据文件按行建立索引以实现对文本数据行的随机访问,我是这么做的:
建立索引:
line = file.readline()
while(line):
	pos = file.tell()
	index.append(pos)
	line = file.readline()
访问文件:
file.seek(index[row]) #row是要访问的行号
line = file.readline()
但是这里有问题,因为这里读入的行数据和实际数据行不一致,行开头少了若干字符

我的分析:
 数据文件是以unix风格的行结尾'\n',
tell()函数返回的偏移值是按照以windows风格结尾'\r\n'转化后计算的
所以tell()返回的值要比物理文件的实际位置大,大的数值就是从文件开头
到当前位置的行数(每行增加了一个'\r'字符)

我的问题:
1.到底我的分析对不对?
2.unix和windows保存文本文件到底有啥根本的差异?
请大虾们指教哈,先谢过了
        amingsc
        amingsc at 163.com
          2005-06-29

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年06月29日 星期三 13:05

limodou limodou at gmail.com
Wed Jun 29 13:05:54 HKT 2005

建 议你参考一下linecache模块,就是干这个用的。很方便 。

在 05-6-29,amingsc<amingsc at 163.com> 写道:
> 我是想为文本数据文件按行建立索引以实现对文本数据行的随机访问,我是这么做的:
> 建立索引:
> line = file.readline()
> while(line):
>         pos = file.tell()
>         index.append(pos)
>         line = file.readline()
> 访问文件:
> file.seek(index[row]) #row是要访问的行号
> line = file.readline()
> 但是这里有问题,因为这里读入的行数据和实际数据行不一致,行开头少了若干字符
> 
> 我的分析:
>  数据文件是以unix风格的行结尾'\n',
> tell()函数返回的偏移值是按照以windows风格结尾'\r\n'转化后计算的
> 所以tell()返回的值要比物理文件的实际位置大,大的数值就是从文件开头
> 到当前位置的行数(每行增加了一个'\r'字符)
> 
> 我的问题:
> 1.到底我的分析对不对?
> 2.unix和windows保存文本文件到底有啥根本的差异?
> 请大虾们指教哈,先谢过了
> amingsc
>         amingsc at 163.com
> 2005-06-29
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 


-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年06月29日 星期三 13:31

alang yin alang.yl at gmail.com
Wed Jun 29 13:31:24 HKT 2005

2.unix和windows保存文本文件到底有啥根本的差异?

0x0D0x0A与0x0D或者0x0D0x0D0x0A的区别

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年06月29日 星期三 13:54

limodou limodou at gmail.com
Wed Jun 29 13:54:52 HKT 2005

就是\n和\r\n的区别

在 05-6-29,alang yin<alang.yl at gmail.com> 写道:
> 2.unix和windows保存文本文件到底有啥根本的差异?
> 
> 0x0D0x0A与0x0D或者0x0D0x0D0x0A的区别
> 


-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年06月29日 星期三 17:29

alang yin alang.yl at gmail.com
Wed Jun 29 17:29:19 HKT 2005

我曾经分析过大型host上下来的0x0D0x0D0x0A行结尾的txt,看来是特例。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号