2014-09-10 25 views
1

我已經給出了一系列我想採用的數字,並將其作爲逗號分隔的數字放入一個python列表或元組中。我一直在堆疊,但也許我找不到正確的方式來解釋我的問題,因爲我一直在尋找方法來將元組收斂到列表,反之亦然。將系列號碼更改爲列表,python

這就是我。我收到一封電子郵件列表一系列的數字,像這樣(但幾百更多):

417985 
417986 
417987 
417988 
417989 
417990 

我將用數字從數據庫中查詢,所以:

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

有什麼辦法在Python中轉換該系列數字,以便我可以在查詢中逗號分隔值?僅供參考,我做了很多python,所以這就是我很滿意的地方,但是我有興趣聽到其他任何方法。

+1

想必你是在談論一個SQL查詢? – 2014-09-10 18:11:54

+0

是的,我是。感謝您指出了這一點。 – Mike 2014-09-10 18:12:24

+1

(%s)'%','。join(list_with_your_numbers)'中的NUMBER或類似的東西是你想要的嗎? – Vladimir 2014-09-10 18:15:35

回答

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() 

然後從我的回答結果應用第一線。

+0

謝謝Martijn!也許我需要澄清一點。我的想法只是將一系列數字複製到python shell中,並將每一個數字解析出來,以便我可以得到一個列表或元組。然後,我可以將列表複製並粘貼到我用於查詢的程序中。我的最後一個查詢將如我在原始問題中提到的那樣,所以我只想讓每個數字都用一個逗號分隔,並用lsit容器包裝,我可以複製和粘貼。 – Mike 2014-09-10 18:24:55

+0

@Mike:如果你只是想複製和粘貼,我給你一個方法來做到這一點。這樣你可以得到一個字符串列表,每行你粘貼一個字符串。 '[int(line)for email_lines]'list comprehension將給你一個整數列表。 – 2014-09-10 18:28:31

+0

感謝Martijn。我花了幾分鐘才弄清楚這是如何工作的。現在就像魅力一樣。最後編輯包含email_lines變量。 – Mike 2014-09-10 20:03:29

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' 
+0

謝謝塞巴斯蒂安。我一次又一次地嘗試了這個,我得到了很好的結果。 – Mike 2014-09-10 20:15:42