簡體   English   中英

從 python 中的文件中讀取逗號分隔的元組

[英]Reading comma separated tuples from a file in python

我正在嘗試從一個文件中讀取幾個用逗號分隔的元組。 示例輸入文件如下所示:

(0, 0), (0, 2), (0, 4), (-1, -1), (0, -2), (1, -1), (-1, -3),

(-1, 1), (-1, 3), (1, 1), (1, 3), (1, 5), (2, 0), (2, 2), (3, 3),

(2, 4), (3, 5), (4, 4), (5, 3), (6, 4), (5, 5), (7, 5)

從這個文件中讀取后,我需要一個這樣的元組:

G = ((0, 0), (0, 2), (0, 4), (-1, -1), (0, -2), (1, -1), (-1, -3), \
(-1, 1), (-1, 3), (1, 1), (1, 3), (1, 5), (2, 0), (2, 2), (3, 3), \
(2, 4), (3, 5), (4, 4), (5, 3), (6, 4), (5, 5), (7, 5))

如何有效地做到這一點? 問候。

因為它們看起來像正確的python元組,所以你可以使用literal_eval 它安全快捷:

安全地評估表達式節點或包含Python表達式的字符串。 提供的字符串或節點可能只包含以下Python文字結構:字符串,數字,元組,列表,dicts,布爾值和None。

import ast
s = '''(0, 0), (0, 2), ...'''
result = ast.literal_eval('({0})'.format(s))

假設有一個包含以下內容的file.txt

(0, 0), (0, 2), (0, 4), (-1, -1), (0, -2), (1, -1), (-1, -3)
(-1, 1), (-1, 3), (1, 1), (1, 3), (1, 5), (2, 0), (2, 2), (3, 3),
(2, 4), (3, 5), (4, 4), (5, 3), (6, 4), (5, 5), (7, 5)

您可以在循環中的每一行上使用literal_eval()並擴展結果列表:

from ast import literal_eval

result = []
with open('file.txt', 'r') as f:
    for line in f:
        result.extend(literal_eval(line.strip()))

print result

打印:

[(0, 0), (0, 2), (0, 4), (-1, -1), (0, -2), (1, -1), (-1, -3), (-1, 1), (-1, 3), (1, 1), (1, 3), (1, 5), (2, 0), (2, 2), (3, 3), (2, 4), (3, 5), (4, 4), (5, 3), (6, 4), (5, 5), (7, 5)]

僅供參考, literal_eval()是安全的:

安全地評估表達式節點或包含Python表達式的字符串。 提供的字符串或節點可能只包含以下Python文字結構:字符串,數字,元組,列表,dicts,布爾值和None。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM