python按字节读取文件中每一行

啊啊啊西吧 2017-06-12 06:55:28

一个文件有3行:
武汉公司 51968
01045200 51960
01045200 02407
我想对每一行,把指定字节大小的内容存成一个变量,譬如第一行读出的变量vari1有8字节,是‘武汉公司’,vari2有4字节,是' 5',vari3有4字节,是‘1968’
用read(8)来读第一个变量,就会读出‘武汉公司 5’
这种好像是按照字符来读,不是按照字节读,不知道怎么按照字节读出想要的内容呢,求解啊,我这里打开文件就是直接:
file=open(file_name, 'rb'),不知道是不是要换种编码方式打开文件呢?

...全文
1133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuifengde 2017-06-13
  • 打赏
  • 举报
回复
3.6的环境,用rb方式打开, txt如果是gbk的可以用read(8)来读 txt如果是utf-8的可以用read(12)来读
手无护鸡之力 2017-06-13
  • 打赏
  • 举报
回复

import struct

s = r'''武汉公司   51968
01045200   51960
01045200   02407''' + '\n'
s = s.decode('utf-8').encode('gbk')
struct.unpack('8s4s4s1s' * 3, s)
print s
>>>
('\xce\xe4\xba\xba\xb9\xab\xcb\xbe', '   5', '1968', '\n', '01045200', '   5', '
1960', '\n', '01045200', '   0', '2407', '\n')
注意每行都有一个换行符。utf-8编码每个汉字占3字节,gbk编码每个汉字占2字节
啊啊啊西吧 2017-06-13
  • 打赏
  • 举报
回复
引用 1 楼 u012536120 的回复:
你为什么是read(8),不是read(4)呢?你直接取,应该可以的 不理解字节,字符有什么区别
# -*- coding:utf-8 -*-

zzr=u'武汉公司   51968'
print zzr[0:4] #武汉公司
print zzr[5:8] #    5
因为实际上的这个输入文件的每一行变量是按照字节固定的,所以我每次要读xx字节的内容当成一个变量,汉字应该占两个字节(用ultraedit打开,好像是ascii编码),但是我用read()或者list的截取【】,每次就会把汉字当成一个单位,导致每次都多取到内容,譬如我要取20字节,也就是10个汉字,结果就会取到10个汉字+10字节的字母
sanGuo_uu 2017-06-13
  • 打赏
  • 举报
回复
你为什么是read(8),不是read(4)呢?你直接取,应该可以的 不理解字节,字符有什么区别
# -*- coding:utf-8 -*-

zzr=u'武汉公司   51968'
print zzr[0:4] #武汉公司
print zzr[5:8] #    5
啊啊啊西吧 2017-06-13
  • 打赏
  • 举报
回复
引用 4 楼 chuifengde 的回复:
3.6的环境,用rb方式打开, txt如果是gbk的可以用read(8)来读 txt如果是utf-8的可以用read(12)来读
谢谢,你的第一句话给了我灵感,我就用二进制打开,每行读成list,截取指定字节大小之后,用gbk方式解码成汉字,果然就截的不多不少,哈哈
啊啊啊西吧 2017-06-13
  • 打赏
  • 举报
回复
引用 3 楼 wn0112 的回复:

import struct

s = r'''武汉公司   51968
01045200   51960
01045200   02407''' + '\n'
s = s.decode('utf-8').encode('gbk')
struct.unpack('8s4s4s1s' * 3, s)
print s
>>>
('\xce\xe4\xba\xba\xb9\xab\xcb\xbe', '   5', '1968', '\n', '01045200', '   5', '
1960', '\n', '01045200', '   0', '2407', '\n')
注意每行都有一个换行符。utf-8编码每个汉字占3字节,gbk编码每个汉字占2字节
unpack感觉不可以呢,我要读出的变量,一个都是占40,100等等很大字节的,unpack里面是格式化为一些int char类型,,,,我不太会用,我用了4楼的方法,二进制打开,截取字节流之后,用gbk方式解码成汉字,果然就截的不多不少,谢谢

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧