【问题标题】:Truncating the last letter in the import list from the csv file从 csv 文件中截断导入列表中的最后一个字母
【发布时间】:2018-05-24 05:45:33
【问题描述】:

这是我的代码:

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 文件中。 有谁知道如何解决这个问题?

【问题讨论】:

    标签: python python-3.x list csv import


    【解决方案1】:

    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】:

      这是因为您传递的是一个列表而不是实际的字符串。

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

      这是因为您的数据是由二维列表组成的。如果您的数据结构如下:

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

      它会起作用的。

      【讨论】:

        【解决方案3】:

        这段代码解决了问题。

        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] 来完成

        【讨论】:

          猜你喜欢
          • 2019-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-13
          • 1970-01-01
          • 2021-07-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多