は、私は以下の内容でテキストファイルを持っていると言う:テキストファイルからの簡単なタプルを作成
50 8 2 DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB
私の目的は、テキストファイルから読み込んで、次の形式でタプルを返す関数を作成することです:
(50, 8, 2, "DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB")
あなただけ手動で整数変換でタプルを構築することができ
は、私は以下の内容でテキストファイルを持っていると言う:テキストファイルからの簡単なタプルを作成
50 8 2 DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB
私の目的は、テキストファイルから読み込んで、次の形式でタプルを返す関数を作成することです:
(50, 8, 2, "DDBD_DCAABCDABCD_ABBAC_DDBD_DCAABCDABCD_ABB")
あなただけ手動で整数変換でタプルを構築することができ
:
def foo(filename):
with open(filename) as file:
t = file.read().split()
return (int(t[0]), int(t[1]), int(t[2]), t[3])
場合や、あなたは空想になりたい:
return tuple(list(map(int, t[:3])) + [t[3]])
list
コールは、Python 2に
または除外することができます。
return tuple(f(x) for x, f in zip(t, (int, int, int, str)))
文字列のタプルに文字列を分割するsplit
関数を使用します。 int
関数は、それを解析できない場合は、ValueError
を生成して解析します。 try/except
ブロックはエラーをキャッチし、代わりに元の文字列を渡します。
def tuple_parser(text):
raw_parts = text.split()
parsed_parts = []
for raw_part in raw_parts:
try:
parsed_part = int(raw_part)
except ValueError:
parsed_part = raw_part
parsed_parts.append(parsed_part)
return tuple(parsed_parts)
def tuple_file_parser(filename)
with open(filename, 'r') as f:
text = f.read()
return tuple_parser(text)
ファイル内にこのような行が複数ある場合は、tuple_parser
をループで呼び出すことができます。 file
オブジェクトを反復処理すると、一度にライン1を返します。
with open(filename, 'r') as f:
tuples = [tuple_parser(line) for for line in f]
コードの長さとは別に、この実装で何が問題になっていますか? –
@ Jean-FrançoisFabre知っていれば地獄。セクシーなワンライナーではないなら、それはSOに属していないようです。 –
多分質問が悪いと考えられるので、答えは必ず_セクシーでなければなりません。 –
あなただけtuple
the_tuple = tuple(int(x) if x.isdigit() else x for x in z.split())
に渡さgenecompで1行に包括的に(int型や文字列のサポートを)それを行うことができます正の整数で動作しますが、ネガをしたい場合は1ライナーが醜いです:
タプルではなく、タプルにキャストします。 – MooingRawr
が編集されました。ありがとう。 –
'(50,8,2、...)'は意味がありませんそれらの数字は来ましたか? m? –
あなたが何をする必要があるのか教えてくれてありがとう、何を試してみましたか? – MooingRawr
申し訳ありません私の悪い、編集を参照してください – Brian