【发布时间】:2017-02-06 16:56:18
【问题描述】:
我正在尝试遍历文本文件中的每一行并执行一些操作。现在我有一个包含以下内容的文本文件:
--- small modified --- #line 1
1,2,3 #line 2
4,5,6 #line 3
--- big modified --- #line 4
7;8;9 #line 5
10;11;12 #line 6
我试图将第 2,3 行解析到一个文件中,将第 5,6 行解析到另一个文件中,但现在,只有第 2 行和第 3 行被写入文件,并且知道为什么“elif”语句没有运行。我无法解决逻辑错误,如果有人可以帮助我,我将不胜感激。
下面是我的代码:
def convert_json(fileName):
with open(fileName,'r') as file:
for line in file:
if 'modified' and 'small' in line:
for li in file:
fields1 = li.split(',')
if len(fields1) >= 3:
smallarr.append({
"a": fields1[0],
"b": fields1[1],
"c": fields1[2]
})
with open('smalljson.txt','w+') as small_file:
json.dump(smallarr, small_file)
else:
pass
elif 'modified' and 'big' in line:
for li in file:
fields2 = li.split(';')
if len(fields2) >= 3:
bigarr.append({
"w1": fields2[0],
"w2": fields2[1],
"w3": fields2[2],
})
with open('big.txt','w+') as big_file:
json.dump(bigarr, big_file)
else:
pass
else:
print 'test'
更新:这是我当前的代码,我能够做到,但仅适用于第 2 行和第 5 行,除了第二个 for 循环之外,我想不出另一种方法来循环这些行
def convert_json(fileName):
with open(fileName,'r') as file:
for line in file:
#if 'modified' in line and 'small' in line:
if 'modified' in line and 'Small' in line:
fields1 = next(file).split(',')
if len(fields1) >= 3:
smallarr.append({
"a": fields1[0],
"b": fields1[1],
"c": fields1[2]
})
with open('smalljson.txt','w+') as small_file:
json.dump(smallarr, small_file)
else:
pass
elif 'modified' in line and 'big' in line:
fields2 = next(file).split(';')
if len(fields2) >= 3:
bigarr.append({
"w1": fields2[0],
"w2": fields2[1],
"w3": fields2[2],
})
with open('bigwater.txt','w+') as big_file:
json.dump(bigarr, big_file)
else:
pass
else:
print 'test'
【问题讨论】:
-
您尝试采取什么措施来解决此问题?您是否尝试过插入调试消息?或者使用 IDE 的调试器(如果有的话)单步执行程序?
-
我尝试循环播放,当我在第一个 else 语句之后插入一个 break 语句时,只有第 2 行、第 5 行和第 6 行被写入。第 3 行没有写。
-
我很确定您的内部 for 循环将遍历整个文件,耗尽您在循环之间共享的迭代器。
-
@juanpa.arrivillaga 有什么建议可以阻止内部 for 循环这样做吗?
-
你可以
breakout。但是您应该使用 1 个 for 循环来执行此操作。