所以我试图读取文件中的倒数第二个数字。我的代码如下:
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"有谁知道这是为什么以及如何解决它?谢谢!
答案 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()