python循环不循环我的期望

时间:2012-11-02 06:46:19

标签: python

我花了最后两个小时试图解决这个问题。请帮助我在过去两个小时内尝试使用Google。没运气。我做错了什么?

codes.txt的内容:

TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;

myscript.py

import re
from sqlalchemy import *

string = open("codes.txt").readlines()

for item in string:
    set = [item.split(";")]
    print "success"

为什么打印"成功"只有一次?我希望它能为codes.txt中的项目数打印成功。

5 个答案:

答案 0 :(得分:5)

readlines()实际上是在寻找换行符,因为看起来你的字符串没有任何字符,它只读取一行,因此只返回一个元素(这就是@kayZhu刚刚说的,道歉 :) )。我想你想分开分号,所以你可以试试这个:

In [19]: with open('codes.txt', 'r') as f:
   ....:     contents = f.read().split(';')
   ....:
   ....:

In [20]: contents
Out[20]:
['TKF6J-KXP6V-F499V-Q9XPC-7J6TZ',
 'J9YCV-D4TH6-WWWWV-F2RM7-F63XZ',
 'GXKCC-QDT34-3JRY4-TWKHX-R763Z',
 '']

然后你的迭代应该按预期工作。另外,尽量避免为变量使用Python内置名称(例如string - 它只会导致心痛:))。

答案 1 :(得分:3)

readlines取决于换行符\n,以将行分隔为列表。在您的情况下,codes.txt的内容只是一行,因此整个列表string只包含一个元素。

答案 2 :(得分:1)

问问自己:在第一次迭代中你期望item是什么?第二?然后这样做:

for item in string:
    print item

看看它与你的期望相比如何。

open("codes.txt").readlines()的结果将为文件中的每个分配一个元素(它不知道您可能与名称item关联的更深层含义)。您的文件目前只有一行 - 如果您添加另一行,所以它看起来像这样:

TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;
TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;

(即,当前行的两倍),您将看到它打印两次。

答案 3 :(得分:0)

试试这个。

string = open("code.txt").readlines()

string= "".join(string)

for item in string.split(";"):

    if len(item)>1:

        print "success"

答案 4 :(得分:0)

  with open(r'C:\Python33\1_.txt') as f:
  d =f.read().split(';')
  for a in d:
      print(a)

其他版本的迭代