bugfix> python > 投稿

私はこのようなtxtファイルを持っています:

input 0 1 2 3 4 5 6 7 0
output 127 191 223 239 247 251 253 254 0

整数 0 1 2 3 4 5 6 7 0 を読みたいリストに。 ここに私のコードがあります:

f=open('data.txt','r')
for line in f:
        if 'input' in line:
                linestr=line.strip('input')
                #linestr=list(map(int,linestr)
                print(linestr)

出力は

0 1 2 3 4 5 6 7 0

しかし、 "print(linestr[0]+1)" を追加すると 、エラー "TypeError: must be str, not int" が表示されます それは私が得たリストがまだ整数ではないことを意味していますか? このリストで数値をintとして使用するにはどうすればよいですか? Thx all

回答 4 件
  • まだ文字列です。 type(linestr) でこれをテストする 。文字列に整数を追加することはできません。

    あなたがする必要があるのは、 liststr から各値を抽出することです 。これは strip() を使用して簡単に実行できます  このリストを実行して各値を取得し、次にそれを int() に渡す必要があります  各値を整数に変換するには、整数を使用してリストに追加し、期待どおりに使用できます。

    new_liststr = []
    for i in liststr.split():
        new_liststr.append(int(i))
    print(new_linestr[0]+1)
    
    

    または、単一のライナーとして:

    new_liststr = [int(i) for i in liststr.split()] 
    print(new_linestr[0]+1)
    
    

  • あなたは str を作成できません  そして、 int   print() の中

    print(linestr[0]+1)
                     ^
                     |
                 not a str
    
    

    あなたはできる:

    print(int(linestr[0])+1)
    
    

  • from pathlib import Path
    doc="""input 0 1 2 3 4 5 6 7 0
    output 127 191 223 239 247 251 253 254 0"""
    Path('temp.txt').write_text(doc)
    with open('temp.txt','r') as f:
        for line in f:
            if 'input' in line:
                 linestr=line.strip('input')
    # here is what you have accomplished:
    assert linestr == ' 0 1 2 3 4 5 6 7 0\n'
    assert linestr == ' '
    #you are tying to do ' '+1
    linelist = map(int, linestr.strip().split(' '))
    assert linestr[0]+1 == 1
    
    

    追伸元のインポートはひどい回避策です。https://docs.python.org/3/library/csv.htmlを使用することを学んでください

  • output = []
    with open('data.txt','r') as f:
        for line in f:
            l = line.split()
            if l[0] == 'input':
                output.extend(map(int, l[1:]))
    
    

あなたの答え