否定寻求蟒蛇

时间:2016-04-12 16:49:00

标签: python

所以我试图读取文件中的倒数第二个数字。我的代码如下:

file = open("file.txt", "rb")
print (file.seek(-2, 2))
file.close()

我的文件内容如下:

1,2,1,1,2,0,1,1,2,1,1,1,0,0,0,0,1,2,0,0,0,1,0,1,1,0,0,0,1,0,0,2,1,1,

我希望该程序可以打印" 1"但它实际打印" 3"有谁知道这是为什么以及如何解决它?谢谢!

3 个答案:

答案 0 :(得分:2)

user=> (read-nth-line "test.txt") IndexOutOfBoundsException clojure.lang.RT.nthFrom (RT.java:871) 的返回值不是从文件中读取的任何内容。在Python 2上,返回值为seek;在Python 3上,返回值是一个表示文件中新绝对位置的数字,它可能与文本模式下文件开头的字节数或字符数不对应。

如果您想在寻找后阅读字符,请拨打None

答案 1 :(得分:1)

值得注意的是seek通过字符偏移(或二进制模式中的字节)来操作。将示例中的数字分隔开的每个逗号将计为一个字符(或者在您以二进制模式打开时的情况下为字节)。为了读取您提供的示例中倒数第二个数字,您需要找回4个字符(2个数字和2个逗号,因为您的文件以逗号结尾),然后读取单个字符

f.seek(-4, 2)
r.read(1)

要知道如果任何数字大于1位,这将不起作用。查看您的文件,它似乎不是用二进制编写的,因此在二进制模式下打开它没有多大意义。如果文件足够小以适应内存,那么读取整个文件会更简单,更不容易出错,然后解析它以获得倒数第二个

number = int(f.read().strip(',').split(',')[-2])

答案 2 :(得分:0)

另一种方法是读取文件并将其拆分为数组。最后,按如下所示获取数组的最后一个字段。

if __name__ == '__main__':
    file = open("file.txt", "rb")
    st = file.read().decode('utf-8').split(',') #convert into array
    l = len(st) # length of the array
    print(st[l - 2]) #(n-2) th element of the array
    file.close()