100分解决一个python读取txt文件,且能知道是读取到哪一行了,多谢

jikikiji 2015-03-03 08:32:11
数据样本是(txt文件)
89 98 100 63
76 88 97 68
56 65 78 100
.....
我现在想输出所有行第一个域的数值,以及第三个域的内容,并且需要把第一行和第二行对应的域相减,第二行和第三行相减,目前思路没了,只能做到输出第一个域和第三个域,如何把第一行和第二行相减并输出呢,请各位大侠指教,谢啦
#!/usr/bin/env python
# -*- coding: gbk -*-
#读取文件
import re
import os
for a in getFileList(r'E:\数据'):
with open('E:\\数据\\'+ a , 'r') as f:
for line in f.readlines():
bbb = line.split()[0]
ccc = line.split()[1]
print bbb,ccc
...全文
884 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jikikiji 2015-03-05
  • 打赏
  • 举报
回复
非常感谢答复,我运行了修改后的脚本,没有获得结果输出 for a in getFileList(r'E:\数据'): count=0 #count + 1就是当前行 bufferLines = {}#把所用行都存起来 with open('E:\\数据\\'+ a , 'r') as f: for line in f.readlines(): bufferLines[count] = line if count>0: #用buerLines[count-1]中的数减去bufferLines[count] numbers1 = bufferLines[count - 1].split() numbers2 = bufferLines[count].split() print "difference:" , int(numbers1[0]) - int(numbers2[0]), int(numbers1[1]) - int(numbers2[1]), int(numbers1[2]) - int(numbers2[2]), int(numbers1[3]) - int(numbers2[3] ) count = count + 1 bbb = line.split()[0] ccc = line.split()[1] print 22222 print bbb,ccc print 1111 得到的结果是 E:\python>test.py 1111
jikikiji 2015-03-05
  • 打赏
  • 举报
回复
多谢jiht594大侠,已经ok,马上结贴
jiht594 2015-03-05
  • 打赏
  • 举报
回复
贴一下我的测试代码, 你要是弄不好我也没办法了 文件路径: E:\\1.txt 数据就是1楼的三行: 89 98 100 63 76 88 97 68 56 65 78 100 输出结果: 89 98 difference: 13 10 3 -5 76 88 difference: 20 23 19 -32 56 65


# coding=utf8
count=0 #count + 1就是当前行
bufferLines = {} #把所用行都存起来
with open('E:\\1.txt' , 'r') as f:
    for line in f.readlines():
        bufferLines[count] = line
        if count>0: #用buerLines[count-1]中的数减去bufferLines[count]
            numbers1 = bufferLines[count - 1].split()
            numbers2 = bufferLines[count].split()
            print "difference:" , int(numbers1[0]) - int(numbers2[0]), int(numbers1[1]) - int(numbers2[1]), int(numbers1[2]) - int(numbers2[2]), int(numbers1[3]) - int(numbers2[3] )
        count = count + 1
        bbb = line.split()[0]
        ccc = line.split()[1]
        print bbb,ccc
jiht594 2015-03-04
  • 打赏
  • 举报
回复
引用 3 楼 jikikiji 的回复:
多谢jiht594和xmnathan指导,我运行了下,提示如下错误,bufferLines是哪个模块里的? Traceback (most recent call last): File "E:\python\test.py", line 54, in <mod bufferLines #把所用行都存起来 NameError: name 'bufferLines' is not defined
上面的相当于伪代码 试试这个

for a in getFileList(r'E:\数据'):
    count=0 #count + 1就是当前行
    bufferLines = {} #把所用行都存起来    
    with open('E:\\数据\\'+ a , 'r') as f:
        for line in f.readlines():
            bufferLines[count] = line
            if count>0: #用buerLines[count-1]中的数减去bufferLines[count]
                numbers1 = bufferLines[count - 1].split()
                numbers2 = bufferLines[count].split()
                print "difference:" , int(numbers1[0]) - int(numbers2[0]), int(numbers1[1]) - int(numbers2[1]), int(numbers1[2]) - int(numbers2[2]), int(numbers1[3]) - int(numbers2[3] )
            count = count + 1
            bbb = line.split()[0]
            ccc = line.split()[1]
            print bbb,ccc
  • 打赏
  • 举报
回复
思路就是至少要临时保存前一行的数据, 当读取到第二行的时候就和缓存的第一行的数据进行运算, 运算完将缓存数据换成第二行的依次类推。 ls的保存所有行的方法也可行。
jikikiji 2015-03-04
  • 打赏
  • 举报
回复
多谢jiht594和xmnathan指导,我运行了下,提示如下错误,bufferLines是哪个模块里的? Traceback (most recent call last): File "E:\python\test.py", line 54, in <mod bufferLines #把所用行都存起来 NameError: name 'bufferLines' is not defined
jiht594 2015-03-03
  • 打赏
  • 举报
回复
for a in getFileList(r'E:\数据'): count=0 #count + 1就是当前行 bufferLines #把所用行都存起来 with open('E:\\数据\\'+ a , 'r') as f: for line in f.readlines(): bufferLines[count] = line if count>0: 用buerLines[count-1]中的数减去bufferLines[count] count = count + 1 bbb = line.split()[0] ccc = line.split()[1] print bbb,ccc

37,721

社区成员

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

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