1

我花了过去两个小时试图弄清楚这一点。请帮助我在过去两个小时内尝试了 Google。没运气。我究竟做错了什么?

code.txt的内容:

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

我的脚本.py

import re
from sqlalchemy import *

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

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

为什么它只打印一次“成功”?我希望它能够成功打印代码.txt 中的项目数。

4

5 回答 5

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,它只会在未来引起心痛 :))。

于 2012-11-02T06:55:43.317 回答
3

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

于 2012-11-02T06:49:45.730 回答
1

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

for item in string:
    print item

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

的结果open("codes.txt").readlines()将为文件中的每一包含一个元素(它不知道您可能与 name 相关联的任何更深层次的含义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;

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

于 2012-11-02T06:56:58.293 回答
0

试试这个。

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

string= "".join(string)

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

    if len(item)>1:

        print "success"
于 2012-11-02T07:15:56.300 回答
0
  with open(r'C:\Python33\1_.txt') as f:
  d =f.read().split(';')
  for a in d:
      print(a)

其他版本的迭代

于 2012-11-02T08:59:16.267 回答