質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

791閲覧

int型としてのテキストファイルの読み込み

wakahide

総合スコア23

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/27 23:38

テキストファイルから読み込んだfile_contentsの数字リストをint型へ変換したいです。
しかしながら、リスト内の要素が一つの場合なら変換できるのですが、タップルの場合はこの方法では変換できません。

file_contents = [['~~~~~~~'], ['10'], ['15'], ['(36, 67, 34, 97)']]
file_contents1 = int("".join([str(_) for _ in file_contents[1]])) file_contents2 = int("".join([str(_) for _ in file_contents[2]])) file_contents3 = "".join([str(_) for _ in file_contents[3]])

file_contents3をint型のタップルとして読み込むにはどうしたらいいか、代案があればご教授いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ast.literal_evalを使ってください。

Python

1import ast 2 3file_content3 = ast.literal_eval(file_contents[3]) 4print(type(file_content3), file_content3) # => <class 'tuple'> (36, 67, 34, 97)

どんな式でも実行してしまうevalに比べ、
ast.literal_evalはリテラル形式の文字列しかパースしないので比較的安全です。

Python

1>>> password = 'MY_SECRET_PASSWORD' 2>>> eval(input()) 3(2, 3) 4(2, 3) 5>>> eval(input()) 6print(*('{}: {}'.format(k, v) for k, v in locals().items()), sep='\n') 7__name__: __main__ 8__doc__: None 9__package__: None 10__loader__: <class '_frozen_importlib.BuiltinImporter'> 11__spec__: None 12__annotations__: {} 13__builtins__: <module 'builtins' (built-in)> 14password: MY_SECRET_PASSWORD

Python

1>>> from ast import literal_eval 2>>> 3>>> password = 'MY_SECRET_PASSWORD' 4>>> literal_eval(input()) 5(2, 3) 6(2, 3) 7>>> literal_eval(input()) 8print(*('{}: {}'.format(k, v) for k, v in locals().items()), sep='\n') 9Traceback (most recent call last): 10 File "<stdin>", line 1, in <module> 11 File "C:...\ast.py", line 99, in literal_eval 12 ... 13ValueError: malformed node or string: <_ast.Call object at 0x0000018D769DCF10>

投稿2020/05/28 00:30

編集2020/05/28 00:33
LouiS0616

総合スコア35668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

文字列をpythonコードと認識させなければならないので、

python

1file_contents3 = eval("".join([str(_) for _ in file_contents[3]]))

こうですね。

実際には、

python

1file_contents3 = eval(file_contents[3][0])

これでいいです。

投稿2020/05/28 00:09

x98000

総合スコア1096

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x98000

2020/05/28 00:49

確かに理解せずにevalは危険ですね。コメントありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問