如何在Python中遍历文件
我有一个文本文件,里面有一些十六进制的数字,我想把它们转换成十进制。虽然我成功地进行了转换,但在循环之前,它似乎读取了一些不需要的字符,所以我遇到了以下错误。
Traceback (most recent call last):
File "convert.py", line 7, in <module>
print >>g, int(x.rstrip(),16)
ValueError: invalid literal for int() with base 16: ''
我的代码如下
f=open('test.txt','r')
g=open('test1.txt','w')
#for line in enumerate(f):
while True:
x=f.readline()
if x is None: break
print >>g, int(x.rstrip(),16)
每个十六进制数字都是单独一行输入的
5 个回答
7
with open('test.txt', 'r') as inf, open('test1.txt', 'w') as outf:
for line in inf:
line = line.strip()
if line:
try:
outf.write(str(int(line, 16)))
outf.write('\n')
except ValueError:
print("Could not parse '{0}'".format(line))
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。
14
你只需要用 for x in f: ...
这样的写法就可以了,这样可以一行一行地读取文件,代码更简洁易懂(部分原因是它会自动在文件结束时停止),而且也省去了调用 rstrip
的步骤,因为结尾的换行符已经被去掉了。
错误的原因在于退出条件,这个条件永远不会成立:即使文件已经读完,readline
也只会返回一个空字符串,而不是 None
。另外要注意的是,你可能还会遇到空行的问题,比如在文件的最后。加上 if line.strip() == "": continue
这行代码可以让程序忽略空行,这样做其实是个不错的选择。
78
错误信息显示,可能是你文件的最后有一个空行。你可以这样来修复它:
f = open('test.txt','r')
g = open('test1.txt','w')
while True:
x = f.readline()
x = x.rstrip()
if not x: break
print >> g, int(x, 16)
另外,使用 for x in f
这种方式会比 readline
更好。别忘了关闭你的文件,或者更好的是,使用 with
语句,这样它会自动帮你关闭文件:
with open('test.txt','r') as f:
with open('test1.txt','w') as g:
for x in f:
x = x.rstrip()
if not x: continue
print >> g, int(x, 16)