Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环不工作-字符串(Python)_Python_Loops_For Loop_Text Files - Fatal编程技术网

循环不工作-字符串(Python)

循环不工作-字符串(Python),python,loops,for-loop,text-files,Python,Loops,For Loop,Text Files,我在读取这些文本文件时需要帮助,不知何故,当我执行递归循环时,另一个循环总是重置为第1行 import sys import codecs # there are actually more utf-8 char to the lines, so i needed codecs reload(sys) sys.setdefaultencoding('utf-8') reader = codecs.open("txtfile1", 'r', 'utf-8') reader2 = codecs.o

我在读取这些文本文件时需要帮助,不知何故,当我执行递归循环时,另一个循环总是重置为第1行

import sys
import codecs # there are actually more utf-8 char to the lines, so i needed codecs
reload(sys)
sys.setdefaultencoding('utf-8')

reader = codecs.open("txtfile1", 'r', 'utf-8')
reader2 = codecs.open("txtfile2", 'r', 'utf-8')

for row in reader:
    print row[0:11] # here the outer loops is running the cycles
    for row2 in reader2:
        print row[0:11] # here the outer loops gets resets
        if row[0:11]==row2[0:11]:
            print row[12:] + row2[12:]
文本文件如下所示:

txtfile1

95032302317 foo
95032302318 bar
95032302319 bron
95032302320 cow
95032302321 how 
95032302322 now
95032303001 lala
95032303002 lili
txtfile2

95032103318 bar (in another utf8 language)
95032103319 bron (in another utf8 language)
95032103320 cow (in another utf8 language)
95032103321 how (in another utf8 language)
95032103322 now (in another utf8 language)
95032103323 didi
95032103324 dada
95032103325 kaka

无法告诉您原因,但只需将reader中的行的
替换为reader.readlines()中的行的
,即可解决此问题。若不能一次导入所有内容,那个么您可能需要手动处理迭代

编辑 我刚刚意识到我做了一些稍微不同的事情来让它工作:

outer = codecs.open(<outer loop file).readlines()
inner = codecs.open(<inner loop file).readlines()

for o in outer:
   for i in inner:
       print o

outer=codecords.open(无法告诉您原因,但只需将reader中的行的
替换为reader.readlines()中的行的
,就可以解决此问题。如果无法一次导入所有内容,则可能需要手动处理迭代

编辑 我刚刚意识到我做了一些稍微不同的事情来让它工作:

outer = codecs.open(<outer loop file).readlines()
inner = codecs.open(<inner loop file).readlines()

for o in outer:
   for i in inner:
       print o

outer=codecs.open(我只想这样做:

row2 = reader2.readlines()
for row in reader.readlines():
    print row
    if row in row2:
        print 'yeah'
编辑: 新解决方案:

row2 = [line[:11] for line in reader2.readlines()]
for row in reader.readlines():
    print row
    if row[:11] in row2:
        print 'yeah'

我只想这样做:

row2 = reader2.readlines()
for row in reader.readlines():
    print row
    if row in row2:
        print 'yeah'
编辑: 新解决方案:

row2 = [line[:11] for line in reader2.readlines()]
for row in reader.readlines():
    print row
    if row[:11] in row2:
        print 'yeah'

这段代码将文件存储在内存中,但如果文件小于几百兆,则可能对您有效

#!/usr/bin/python2 -S
# -*- coding: utf-8 -*-
# vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab

import sys
sys.setdefaultencoding("utf-8")
import site

import codecs

t1 = {}
t2 = {}

with codecs.open("txtfile1", 'r', 'utf-8') as reader:
    for row in reader:
        number, text = row.split(" ", 1)
        t1[number] = text

with codecs.open("txtfile2", 'r', 'utf-8') as reader:
    for row in reader:
        number, text = row.split(" ", 1)
        t2[number] = text

common = set(t1.keys()) & set(t2.keys())

while common:
    key = common.pop()
    print t1[key], t2[key]

这段代码将文件存储在内存中,但如果文件小于几百兆,则可能对您有效

#!/usr/bin/python2 -S
# -*- coding: utf-8 -*-
# vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab

import sys
sys.setdefaultencoding("utf-8")
import site

import codecs

t1 = {}
t2 = {}

with codecs.open("txtfile1", 'r', 'utf-8') as reader:
    for row in reader:
        number, text = row.split(" ", 1)
        t1[number] = text

with codecs.open("txtfile2", 'r', 'utf-8') as reader:
    for row in reader:
        number, text = row.split(" ", 1)
        t2[number] = text

common = set(t1.keys()) & set(t2.keys())

while common:
    key = common.pop()
    print t1[key], t2[key]


可能是
print row2[0:11]#这里外部循环被重置
,或者您真的想在两个循环中打印
row[0:11]
?您想做什么还不完全清楚,但您的解决方案似乎不太理想。根据您实际想做什么,您可能想使用
map()
zip()
如果行2中有行,而不是两个
循环…@DrTyrsa:我需要打印行[0:11]在内部循环中,但外部循环被重置,每当我在内部循环中时,你想解决什么任务?@Kimvais,我需要检查txt1中的数字是否也在txt2中。如果是,那么我需要打印出它们的行可能是
print row2[0:11]#在这里,外部循环被重置
,或者您真的想在两个循环中打印
行[0:11]
?您想做什么还不完全清楚,但您的解决方案似乎不太理想。根据您实际想做的,您可能想使用
map()
zip()
如果行2中有行,而不是两个
循环…@DrTyrsa:我需要打印行[0:11]在内部循环中,但外部循环被重置,每当我在内部循环中,你想解决什么任务?@Kimvais,我需要检查txt1中的数字是否也在txt2中。如果是,那么我需要打印出它们没有的行。我试过了,外部循环的重置也会发生什么是REPL?我在使用pythonlinux terminalYESH中的2.6.5是有效的。在循环外部声明readlines()似乎可以防止重置。但为什么会发生这种情况,这有点神秘。不。我已经尝试过了,同样的外部循环重置发生了什么是REPL?我正在使用linux terminalYESH中的python 2.6.5,它有效。声明readlines()外部循环似乎阻止了重置。但为什么会发生这种情况,这是一个谜。感谢naeg,如果它使用同一种语言,它就起作用了。但现在这是因为它是两种不同的人类语言的两个不同文件。感谢naeg,这也起作用。python循环中有一些东西可以重置reader.read Function,readline()更贴切。感谢naeg,如果它使用同一种语言,它就可以工作。但现在这是因为它是两种不同的人类语言中的两个不同文件。感谢naeg,这也可以工作。python循环中有一些东西可以重置reader.read Function,readline()更合适。似乎从内存缓冲区中弹出它可能会起作用。我遇到了一个错误。此外,数字和文本之间没有空格,它是一个句子,而不是一个单词。回溯(最后一次调用):文件“kyoutta.py”,第22行,在数字中,text=row.split(“,1)ValueError:需要超过1个值才能解压。好的,它与示例文本一起工作。我确信您必须根据实际文本调整它。似乎从内存缓冲区中弹出它可能会起作用。我遇到了一个错误。此外,数字和文本之间不是用空格分隔的,而是一个句子,而不是一个单词。回溯(最后一次调用):文件“kyoutta.py”,第22行,在数字中,text=row.split(“,1)ValueError:需要超过1个值才能解压。好的,它与示例文本一起工作。我确信您必须根据实际文本调整它。