Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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_Python 2.7 - Fatal编程技术网

Python 如何循环一行中的每个单词,然后循环文件中的每一行?

Python 如何循环一行中的每个单词,然后循环文件中的每一行?,python,python-2.7,Python,Python 2.7,我有一个口述的喜欢 list1={'ab':10,'ba':20,'def':30}. 现在,我的输入文件包含: ab def ba ab 我已编码: filename=raw_input("enter file:") f=open(filename,'r') ff=open(filename+'_value','w') for word in f.read().split(): s=0 if word in list1: f

我有一个口述的喜欢

list1={'ab':10,'ba':20,'def':30}. 
现在,我的输入文件包含:

ab def
ba ab

我已编码:

    filename=raw_input("enter file:")
    f=open(filename,'r')
    ff=open(filename+'_value','w')
    for word in f.read().split(): 
    s=0
    if word in list1:
        ff.write(word+'\t'+list1[word]+'\n');
        s+=int(list1[word])
    else:
        ff.write(word+'\n')
     ff.write("\n"+"total:%d"%(s)+"\n") 
现在我希望输出文件包含:

ab 10
def 30
总数:40

ba 20
ab 10
总数:30


我不能为每一行循环它。我该怎么做?我使用f.readlines()、f.read()尝试了一些变体,并尝试了一次循环,然后两次循环。但我不能把它弄对

您需要做两个循环,而不仅仅是一个:

filename = raw_input("enter file:")
with open(filename, 'r') as f, open(filename + '_value','w') as ff:
    # Read each line sequentially
    for line in f.read(): 
        # In each line, read each word
        total = 0
        for word in line.split():
            if word in list1:
                ff.write("%s\t%s\n" % (word, list1[word]))
                total += int(list1[word])
            else:
                ff.write(word+'\n')

        ff.write("\ntotal: %s\n" % total)   

我还清理了一点您的代码,使其更具可读性。另外,如果您想理解带有块的
,而不是立即给出答案,让我给您一个问题的要点:

要读取整个文件,请执行以下操作:

f = open('myfile','r')
data = f.read()
要循环文件中的每一行,请执行以下操作:

for line in data:
要循环浏览行中的每个单词,请执行以下操作:

    for word in line.split():

明智地使用它来得到你想要的。

这是一个命令,而不是一个命令list@PadraicCunningham:S很抱歉没有正确提及它。我在代码中将该dict命名为list1,并从该dict中检索值。您想检查一行中是否有一些单词,并对列表1中分配给该单词的值求和。是吗?@Llopis:是的,我想对文件中的每一行进行求和并打印。我无法打印每一行。@charvi如果您已经完成了,请不要忘记关闭文件。是的,但我们不知道OP是否还想对f执行其他操作file@Llopis:我已在操作后关闭文件。谢谢你。@Maximelrant:Thank u,n我认为total=0应该在外循环中。@Llopis他在循环后仍然可以这样做,或者回滚到经典的
打开
/
关闭
。这里的
只是为了有一个完整、正确的工作示例;)
 with open("in.txt","r") as f:
    with open("out.txt","w") as f1:
        for line in f:
            words = line.split() # split into list of two words
            f1.write("{} {}\n".format((words[0]),list1[words[0]]))  # write first word plus value
            f1.write("{} {}\n".format((words[1]),list1[words[1]])) # second word plus value
            f1.write("Total: {}\n".format((int(list1[words[0]]) + int(list1[words[1]])))) # finally add first and second and get total