这是我的代码:
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ć']]
[[], [], []]
为什么我编写的方法不返回包含每个单独元素的最后一个字符的列表?
我想以列表的形式从import csv文件中更改,使用tip替换具有多个不同差异的特定元素的最后一个字符,然后将它们重新保存到csv文件中。 有谁知道如何解决这个问题?
答案 0 :(得分: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']
它会起作用。
答案 1 :(得分: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']]
基于此内容:
robić
marudzić
biegać
name.csv
的。
答案 2 :(得分: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]
来完成