2017-12-10 4 views
0

これは私のコードです:csvファイルからインポートリスト内の最後の文字を切り捨て

import csv 

with open('name.csv', 'r') as f: 
    reader = csv.reader(f) 
    my_list = list(reader) 

print(my_list) 

def remove_cruft(s): 
    return s[:-1] 


new_list=[remove_cruft(s) for s in my_list] 
print(new_list) 

は出力:

[['robić'], ['marudzić'], ['biegać']] 
[[], [], []] 

なぜ私が書いた方法は、最後にリストを返しません。それぞれの個々の要素の文字をカット?

リストの形式でインポートcsvファイルから変更し、特定の要素の最後の文字をヒントといくつかの異なる差異に置き換えて、それらをcsvファイルに再保存したいと思います。 誰もこの問題を解決する方法を知っていますか?

答えて

0

readerは、各繰り返しで行のすべての項目のリストを提供するイテレータです。 これは、このイテレータを利用して、便利なソリューションです:

import csv 

def remove_cruft(s): 
    return s[:-1] 

with open('name.csv', 'r') as f: 
    reader = csv.reader(f) 
    my_list = [[remove_cruft(item) for item in line] for line in reader] 

print(my_list) 

出力:

[['robi'], ['marudzi'], ['biega']] 

このコンテンツに基づいて:name.csv

robić 
marudzić 
biegać 

0

これは、実際の文字列ではなくリストを渡すために起こります。

>>> s = [['robić'], ['marudzić'], ['biegać']] 
>>> s[0] 
['robić'] 

>>> s[0][:-1] 
[] 

>>> s[0][0] 
'robić' 

>>> s[0][0][:-1] 
'robi' 

これは、データが2Dリストで構成されているためです。次のようにデータを構造化した場合:

>>> s = ['robić', 'marudzić', 'biegać'] 
>>> [remove_cruft(a) for a in s] 
['robi', 'marudzi', 'biega'] 

これは機能します。

0

このコードはこの問題を解決します。

import csv 

with open('name.csv', 'r') as f: 
    reader = csv.reader(f) 
    my_list = list(reader) 

print(my_list) 

def remove_cruft(s): 
    return s[:-1] 


new_list=[remove_cruft(s) for s in my_list[0]] 
print(new_list) 

出力: -

[['robić', 'marudzić', 'biegać']] 
['robi', 'marudzi', 'biega'] 

実際には、あなたのコードが生成する出力は次のとおりです。 -

[['robić', 'marudzić', 'biegać']] 
[['robić', 'marudzić']] 

あなたが(remove_cruftする文字列を渡す必要があります)、my_listというをトラバースすることにより行うことができます[0]

関連する問題