将数字序列更改为List,python

时间:2014-09-10 18:10:36

标签: python list csv

我已经获得了一系列我想要的数字,并以逗号分隔的数字放入python列表或元组中。我一直在堆叠,但也许我找不到正确的方式来表达我的问题,因为我一直在寻找将元组转换为列表的方法,反之亦然。

这就是我所拥有的。我收到了一封电子邮件,里面有一系列数字列表(但还有几百个):

417985
417986
417987
417988
417989
417990

我将使用这些数字从数据库进行查询,所以:

NUMBER in (417985,417986,417987,417988,417989,417990)

有没有办法在python中转换这一系列的数字,以便我可以在查询中找到逗号分隔的值?仅供参考,我做了很多蟒蛇游戏,所以这就是我很有兴趣的地方,不过我会有兴趣听到任何其他方法。

2 个答案:

答案 0 :(得分:2)

如果要在SQL查询中使用这些数字,则需要生成 SQL参数而不是构建查询字符串。

你已经读过你的行并把它变成一个整数的序列(列表会这样做):

numbers = [int(line) for line in email_lines]

然后,您为每个值生成一个包含足够占位符的查询:

statement = "SELECT * FROM table WHERE NUMBER IN ({0})".format(
    ', '.join(['?' * len(numbers)]))

我假设您使用的数据库连接器使用?作为SQL参数占位符;它也可以是%s

现在您可以向数据库询问是否匹配行:

cursor.execute(statement, numbers)

通过使用SQL参数,您可以免费获得一些东西:

  • 正确引用和转义值。这里不太重要,因为你已经把所有东西都转换成了整数,但是不要自己逃避并引用价值观是一种好习惯;你几乎肯定会错过一些东西。
  • 重用缓存的查询计划;数据库只需解析一次statement查询,并可以将结果重用于后续查询。

如果您想复制并粘贴这些数字,请输入:

email_lines = """\
<paste your lines with numbers>
""".splitlines()

然后将我的答案中的第一行应用于结果。

答案 1 :(得分:1)

这可能是你想要的吗?

raw = """417985
417986
417987
417988
417989
417990"""

numbers = [int(n) for n in raw.split()]

>> numbers_int
[417985, 417986, 417987, 417988, 417989, 417990]

或者如果你想构建一个字符串

numbers_str = [n for n in raw.split()]
>> ",".join(numbers_str)
'417985,417986,417987,417988,417989,417990'