0
my_list = []
with open(home + "/Documents/stocks/" + filePath , newline='') as f:
    array1 = (line.split(',') for line in f.readlines())
    last_col = [line.split(',')[-1] for line in f]
    for line in array1:          
        my_list.append(line[-1])

これは機能しますが、my_list は各行\nの最後にあります。どうすれば削除できますか。削除した後、どうすれば整数リストに変換できますか? 私は何かをやってみました

list(map(int, my_list))

しかし、改行のためにエラーが発生します。

ValueError: invalid literal for int() with base 10: 'Adj Close\n'
4

3 に答える 3

0

最後の列を整数のリストにしたいだけのようです。あれは正しいですか?もしそうなら:

with open(datafile) as fin:
    last_column = [ int(line.split(',')[-1]) for line in fin ]

トリックを行う必要があります...

各行を整数のリストにしたい場合:

with open(datafile) as fin:
    rows = [ [int(x) for x in line.split(',')] for line in fin ]
    #same as
    #rows = [ list(map(int,line.split(','))) for line in fin ] #if you prefer ...

Python では、int空白を含む文字列を喜んで変換することに注意してください。

>>> print(int('\t\n300\n'))
300

改行は問題ではありません...(python3.2とpython2.7を使用してテスト済み)

于 2013-02-05T02:25:16.033 に答える
0

CSV ファイルを解析したい場合、最後の列の改行、コンマの前後のスペースなど、すべての面倒なケースに対処する必要はありません。Python にcsv付属のモジュールを使用するだけです。

my_list = []
with open(home + "/Documents/stocks/" + filePath) as f:
    for row in csv.reader(f):
        numbers = list(map(int, row))
        my_list.append(line[-1])

または、おそらくもっと簡単に:

with open(home + "/Documents/stocks/" + filePath) as f:
    my_list = [list(map(int, row)) for row in csv.reader(f)]

リスト内包表記と amapを 1 行に混在させるのは少し意外に思えますが、この場合は、純粋な内包表記よりも少し良く見えると思います。

with open(home + "/Documents/stocks/" + filePath) as f:
    my_list = [[int(col) for col in row] for row in csv.reader(f)]

そして、純粋な機能的な代替手段よりもはるかに優れています:

my_list = list(map(compose(list, partial(map, int)), 
                   csv.reader(iterwith(open(home + "/Documents/stocks/" + filePath)))))
于 2013-02-05T02:28:40.543 に答える
0

あなたの既存のコードは、あなたがやろうとしていることに対してうまく機能します。

自己完結型にするために、ファイルを としてプログラムに移動しましたStringIOが、それ以外の場合は、これがあなたのコードです。

import io

f = io.StringIO('''1, 2, 3
4, 5, 6
''')

my_list = []
array1 = (line.split(',') for line in f.readlines())
last_col = [line.split(',')[-1] for line in f]
for line in array1:          
    my_list.append(line[-1])

print(list(map(int, my_list)))

そして、これが何をするかです:

[3, 6]

まさにあなたが望んでいたものですよね?

したがって、機能しない場合、それは改行が原因ではありません。それは別の理由によるものです。そして、エラーが何であるか、または「改行が原因でエラーが発生しました」以外のことについて何も言わなかったので、他の何かが何であるかを推測することはできません. 多分あなたは3.6そこに を持っていて、あなたは を得ていますValueError: invalid literal for int() with base 10: '3.6'。指定したパスにファイルがなく、FileNotFoundErrorエラーが発生している可能性があります。シバンを忘れて、Python 2 インタープリターまたは bash を使用して Python 3.x スクリプトを実行している可能性があります。あなたが私たちに言ったことに基づいて、何でも可能です。

于 2013-02-05T02:44:07.237 に答える