【问题标题】:subscripting a specific line from python's csv reader?从python csv阅读器下标特定行?
【发布时间】:2010-07-09 18:07:30
【问题描述】:

我希望能够通过 csv 阅读器访问 csv 文件的特定行。例如第四行。有没有办法用 python 的 csv 阅读器模块做到这一点?

【问题讨论】:

    标签: python file-io csv


    【解决方案1】:

    您只需解析所有 CSV 文件,然后使用正常的排序索引。

    否则,你可以这样做

    def my_filter(csv_file, lines):
       for line_number, line in enumerate(csv_file):
           if line_number in lines:
              yield line
    
    my_file = open("file.csv")
    my_reader = csv.reader(my_filter(my_file, (3,)))
    

    请注意,您无法避免以某种方式或另一种方式解析整个文件,因为这些行的长度是可变的。仅当找到“\n”时,行数才会增加,并且必须逐个字符地找到它。

    此外,如果您碰巧在 csv 文件的引号内有换行符,则此过滤器将不起作用 - 无论如何,您最好将整个文件解析为列表,然后从那里检索索引:

    my_file = open("file.csv")
    my_reader = csv.reader(my_file)
    my_line = list(my_reader)[3]
    

    更新 最重要的是:如果您需要随机访问太大而无法放入内存的信息,只需考虑将其转储到 SQL 数据库即可。它将节省一个人重新发明很多轮子。

    【讨论】:

    • 当然。该文件太大而无法一次将整个内容读入内存。我计划访问所有行,但还需要在文件中跳转,并且必须避免一次加载整个内容。
    • 所以,过滤器解决方案会帮助你 - (只要你没有 \n 的内部文字值)。如果您需要乱序访问,可以使用过滤器解决方案创建一个列表,如上一个示例所示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多