精华内容
下载资源
问答
  • 用 Python 生成 CSV 文件
    千次阅读
    2021-06-20 16:50:11

     

    在本教程中,我们将借助示例学习在 Python 中编写不同格式的 CSV 文件。

     

    我们将专门使用csvPython 内置的模块来完成此任务。但首先,我们必须将模块导入为:

    import csv
    

    我们已经介绍了如何使用该csv模块读取和写入 CSV 文件的基础知识。如果您对使用该csv模块没有任何想法,请查看我们的Python CSV教程:读取和写入 CSV 文件


    csv.writer() 的基本用法

    让我们看一个csv.writer()用于刷新现有知识的基本示例。

    示例 1:使用 csv.writer() 写入 CSV 文件

    假设我们要编写一个包含以下条目的 CSV 文件:

    SN、姓名、贡献
    1、Linus Torvalds、Linux内核
    2、Tim Berners-Lee,万维网
    3、Guido van Rossum,Python编程
    

    这是我们如何做到的。

    import csv
    with open('innovators.csv', 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["SN", "Name", "Contribution"])
        writer.writerow([1, "Linus Torvalds", "Linux Kernel"])
        writer.writerow([2, "Tim Berners-Lee", "World Wide Web"])
        writer.writerow([3, "Guido van Rossum", "Python Programming"])
    

    当我们运行上述程序时,会在当前工作目录中创建一个具有给定条目的innovators.csv文件。

    在这里,我们使用函数以写入模式打开了innovators.csv文件open()

    要了解有关在 Python 中打开文件的更多信息,请访问:Python 文件输入/输出

    接下来,该csv.writer()函数用于创建一个writer对象。writer.writerow()然后使用该函数将单行写入 CSV 文件。


    示例 2:使用 writerows() 写入多行

    如果我们需要将二维列表的内容写入 CSV 文件,我们可以这样做。

    import csv
    row_list = [["SN", "Name", "Contribution"],
                 [1, "Linus Torvalds", "Linux Kernel"],
                 [2, "Tim Berners-Lee", "World Wide Web"],
                 [3, "Guido van Rossum", "Python Programming"]]
    with open('protagonist.csv', 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerows(row_list)
    

    程序的输出与示例 1 中的相同。

    在这里,我们的二维列表被传递给writer.writerows()函数以将列表的内容写入 CSV 文件。


    现在让我们看看如何编写不同格式的 CSV 文件。然后我们将学习如何自定义csv.writer()函数来编写它们。


    带有自定义分隔符的 CSV 文件

    默认情况下,逗号用作 CSV 文件中的分隔符。但是,某些 CSV 文件可以使用逗号以外的分隔符。很少有流行的是|\t

    假设我们要|示例 1innovators.csv文件中用作分隔符。为了编写这个文件,我们可以向函数传递一个额外的参数。delimitercsv.writer()

    让我们举个例子。

    示例 3:写入带有管道分隔符的 CSV 文件

    import csv
    data_list = [["SN", "Name", "Contribution"],
                 [1, "Linus Torvalds", "Linux Kernel"],
                 [2, "Tim Berners-Lee", "World Wide Web"],
                 [3, "Guido van Rossum", "Python Programming"]]
    with open('innovators.csv', 'w', newline='') as file:
        writer = csv.writer(file, delimiter='|')
        writer.writerows(data_list)
    

    输出

    SN|姓名|贡献
    1|Linus Torvalds|Linux 内核
    2|蒂姆·伯纳斯-李|万维网
    3|Guido van Rossum|Python 编程
    

    正如我们所见,可选参数delimiter = '|'有助于指定writerCSV 文件应具有的对象|作为分隔符。


    带引号的 CSV 文件

    一些 CSV 文件在每个或某些条目周围都有引号。

    我们以quotes.csv为例,有以下条目:

    "SN";"名称";"行情"
    1;“佛陀”;“我们认为我们成为了什么”
    2;“马克吐温”;“永远不要后悔任何让你微笑的事情”
    3;“奥斯卡王尔德”;“做你自己,其他人都已经被带走了”
    

    csv.writer()默认情况下使用不会将这些引号添加到条目中。

    为了添加它们,我们将不得不使用另一个名为quoting.

    让我们举一个例子来说明如何在非数字值周围使用引号并将其;用作分隔符。

    示例 4:写入带引号的 CSV 文件

    import csv
    row_list = [
        ["SN", "Name", "Quotes"],
        [1, "Buddha", "What we think we become"],
        [2, "Mark Twain", "Never regret anything that made you smile"],
        [3, "Oscar Wilde", "Be yourself everyone else is already taken"]
    ]
    with open('quotes.csv', 'w', newline='') as file:
        writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC, delimiter=';')
        writer.writerows(row_list)
    

    输出

    "SN";"名称";"行情"
    1;“佛陀”;“我们认为我们成为了什么”
    2;“马克吐温”;“永远不要后悔任何让你微笑的事情”
    3;“奥斯卡王尔德”;“做你自己,其他人都已经被带走了”
    

    在这里,quotes.csv文件是在工作目录中创建的,其中包含上述条目。

    如您所见,我们已经传递csv.QUOTE_NONNUMERICquoting参数。它是csv模块定义的常量。

    csv.QUOTE_NONNUMERIC指定writer应在非数字条目周围添加引号的对象。

    您可以将其他 3 个预定义常量传递给quoting参数:

    • csv.QUOTE_ALL- 指定writer对象以在所有条目周围加上引号来写入 CSV 文件。
    • csv.QUOTE_MINIMAL-指定writer对象只引用那些含有特殊字符(字段分隔符quotechar或以任何字符lineterminator
    • csv.QUOTE_NONE- 指定writer不应引用任何条目的对象。它是默认值。

    带有自定义引用字符的 CSV 文件

    我们还可以使用自定义引用字符编写 CSV 文件。为此,我们将不得不使用一个名为 的可选参数quotechar

    让我们以示例 4中编写quotes.csv文件为例,但使用*作为引用字符。

    示例 5:使用自定义引用字符写入 CSV 文件

    import csv
    row_list = [
        ["SN", "Name", "Quotes"],
        [1, "Buddha", "What we think we become"],
        [2, "Mark Twain", "Never regret anything that made you smile"],
        [3, "Oscar Wilde", "Be yourself everyone else is already taken"]
    ]
    with open('quotes.csv', 'w', newline='') as file:
        writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC,
                            delimiter=';', quotechar='*')
        writer.writerows(row_list)
    

    输出

    *SN*;*姓名*;*报价*
    1;*佛陀*;*我们认为我们成为了什么*
    2;*马克吐温*;*永远不要后悔任何让你微笑的事情*
    3;*奥斯卡王尔德*;*做你自己,其他人都已经被带走了*
    

    在这里,我们可以看到该quotechar='*'参数指示writer对象*用作所有非数字值的引用。


    CSV 模块中的方言

    请注意,在示例 5 中,我们向函数传递了多个参数(quoting,delimiterquotecharcsv.writer()

    这种做法在处理一两个文件时是可以接受的。但是一旦我们开始使用多个具有相似格式的 CSV 文件,它就会使代码变得更加冗长和丑陋。

     

     

    作为对此的解决方案,该csv模块提供dialect了一个可选参数。


    方言有助于将许多特定的格式模式(如delimiterskipinitialspacequoting、 )组合escapechar到一个方言名称中。

    然后它可以作为参数传递给多个writerreader实例。


    示例 6:使用方言写入 CSV 文件

    假设我们要编写一个包含以下内容的 CSV 文件(office.csv):

    “ID”|“姓名”|“电子邮件”
    "A878"|"Alfonso K. Hamby"|"alfonsokhamby@rhyta.com"
    "F854"|"Susanne Briard"|"susannebriard@armyspy.com"
    "E833"|"Katja Mauer"|"kmauer@jadoop.com"
    

    CSV 文件在每个条目周围都有引号并|用作分隔符。

    不是传递两个单独的格式模式,让我们看看如何使用方言来编写这个文件。

    import csv
    row_list = [
        ["ID", "Name", "Email"],
        ["A878", "Alfonso K. Hamby", "alfonsokhamby@rhyta.com"],
        ["F854", "Susanne Briard", "susannebriard@armyspy.com"],
        ["E833", "Katja Mauer", "kmauer@jadoop.com"]
    ]
    csv.register_dialect('myDialect',
                         delimiter='|',
                         quoting=csv.QUOTE_ALL)
    with open('office.csv', 'w', newline='') as file:
        writer = csv.writer(file, dialect='myDialect')
        writer.writerows(row_list)
    

    输出

    “ID”|“姓名”|“电子邮件”
    "A878"|"Alfonso K. Hamby"|"alfonsokhamby@rhyta.com"
    "F854"|"Susanne Briard"|"susannebriard@armyspy.com"
    "E833"|"Katja Mauer"|"kmauer@jadoop.com"
    

    在这里,office.csv是在工作目录中创建的,其中包含上述内容。

    从这个例子中,我们可以看到该csv.register_dialect()函数用于定义自定义方言。它的语法是:

    csv.register_dialect(name[, dialect[, **fmtparams]])
    

    自定义方言需要字符串形式的名称。其他规范可以通过传递类的子类来完成,也可以Dialect通过单独的格式模式来完成,如示例中所示。


    在创建writer对象时,我们通过dialect='myDialect'指定 writer 实例必须使用该特定方言。

    使用的好处dialect是它使程序更加模块化。请注意,我们可以重用myDialect来编写其他 CSV 文件,而无需重新指定 CSV 格式。


    使用 csv.DictWriter() 写入 CSV 文件

    csv.DictWriter()类的对象可用于从 Python 字典写入 CSV 文件。

    csv.DictWriter()该类的最小语法是:

    csv.DictWriter(file, fieldnames)
    

    这里,

    • file - 我们要写入的 CSV 文件
    • fieldnames-list应包含列标题的对象,指定应将数据写入 CSV 文件的顺序

    示例 7:Python csv.DictWriter()

    import csv
    
    with open('players.csv', 'w', newline='') as file:
        fieldnames = ['player_name', 'fide_rating']
        writer = csv.DictWriter(file, fieldnames=fieldnames)
    
        writer.writeheader()
        writer.writerow({'player_name': 'Magnus Carlsen', 'fide_rating': 2870})
        writer.writerow({'player_name': 'Fabiano Caruana', 'fide_rating': 2822})
        writer.writerow({'player_name': 'Ding Liren', 'fide_rating': 2801})
    

    输出

    该程序创建了一个player.csv文件,其中包含以下条目:

    player_name,fide_rating
    马格努斯卡尔森,2870
    法比亚诺卡鲁阿纳,2822
    丁立人,2801
    

    csv.DictWriter()该类的完整语法是:

    csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
    

    要详细了解它,请访问:Python csv.DictWriter() 类


    带有换行符的 CSV 文件

    Alineterminator是用于终止writer对象生成的行的字符串。默认值为\r\n。您可以通过将任何字符串作为lineterminator参数传递来更改其值。

    但是,reader对象仅识别\n\r作为lineterminator值。因此,强烈建议不要使用其他字符作为行终止符。


    CSV 模块中的双引号和转义字符

    为了分隔条目中的分隔符,csv模块默认使用引号引用条目。

    所以,如果你有一个条目: 他是一个强壮健康的人,它会写成: “他是一个强壮、健康的人”.

    类似地,该csv模块使用双引号来转义默认情况下存在于条目中的引号字符。

    如果你有一个条目: 转到“programiz.com”,可以写成: "转到""programiz.com""".

    在这里,我们可以看到每个"后面都跟了一个"来逃避前一个。


    双引号

    它处理如何quotechar引用条目本身。当 时True,引用字符加倍,当 时Falseescapechar用作 的前缀quotechar。默认情况下,其值为True

    转义符

    escapechar参数是一个字符串来转义分隔符,如果quoting 设置为csv.QUOTE_NONEquotechar 如果doublequote 是False。其默认值为无。

    示例 8:在 csv writer 中使用转义字符

    import csv
    row_list = [
        ['Book', 'Quote'],
        ['Lord of the Rings',
            '"All we have to decide is what to do with the time that is given us."'],
        ['Harry Potter', '"It matters not what someone is born, but what they grow to be."']
    ]
    with open('book.csv', 'w', newline='') as file:
        writer = csv.writer(file, escapechar='/', quoting=csv.QUOTE_NONE)
        writer.writerows(row_list)
    

    输出

    预订、报价
    指环王,/“我们所要做的就是如何处理给我们的时间。/”
    哈利·波特,/“重要的不是一个人的出生/,而是他们成长为什么样的人。/”
    

    在这里,我们可以看到这/是所有"and 的前缀,,因为我们指定了quoting=csv.QUOTE_NONE.

    如果未定义,则输出将是:

    预订、报价
    指环王,"""我们只需要决定如何处理给我们的时间。"""
    哈利·波特,"""重要的不是一个人的出生,而是他们成长为什么样的人。"""
    

    由于我们允许引用,带有特殊字符的条目("在本例中)被双引号引用。条目delimiter也包含在引号字符中。(开始和结束引号字符)

    其余的引号字符将"作为字符串的一部分转义实际存在,以便它们不会被解释为quotechar。


    注意: csv 模块也可以用于其他文件扩展名(如:.txt),只要它们的内容结构正确。

    更多相关内容
  • js生成csv文件下载

    热门讨论 2016-12-14 17:12:24
    js生成csv文件下载
  • Python处理CSV文件(一)

    千次阅读 2021-02-27 23:40:14
    CSV 文件 CSV(comma-separated value,逗号分隔值)文件格式是一种非常简单的数据存储与分享方式。CSV 文件将数据表格存储为纯文本,表格(或电子表格)中的每个单元格都是一个数值或字符串。与 Excel 文件相比,...

    CSV 文件

    CSV(comma-separated value,逗号分隔值)文件格式是一种非常简单的数据存储与分享方式。CSV 文件将数据表格存储为纯文本,表格(或电子表格)中的每个单元格都是一个数值或字符串。与 Excel 文件相比,CSV 文件的一个主要优点是有很多程序可以存储、转换和处理纯文本文件;相比之下,能够处理 Excel 文件的程序却不多。所有电子表格程序、文字处理程序或简单的文本编辑器都可以处理纯文本文件,但不是所有的程序都能处理 Excel 文件。尽管 Excel 是一个功能非常强大的工具,但是当你使用 Excel 文件时,还是会被局限在 Excel 提供的功能范围内。CSV 文件则为你提供了非常大的自由,使你在完成任务的时候可以选择合适的工具来处理数据——如果没有现成的工具,那就使用 Python 自己开发一个!

    当你使用 CSV 文件时,确实会失去某些 Excel 功能:在 Excel 电子表格中,每个单元格都有一个定义好的“类型”(数值、文本、货币、日期等),CSV 文件中的单元格则只是原始数据。幸好,Python 在识别不同数据类型方面相当聪明。使用 CSV 文件的另一个问题是它只能保存数据,不能保存公式。但是,通过将数据存储(CSV 文件)和数据处理(Python 脚本)分离,你可以很容易地在不同数据集上进行加工处理。当数据存储和数据处理过程分开进行时,错误(不管是数据处理中的错误,还是数据存储中的错误)不但更容易被发现,而且更难扩散。

    要使用 CSV 文件开始工作,需要先创建一个 CSV 文件,你可以从以下地址https://github.com/cbrownley/foundations-for-analytics-with-python/blob/master/csv/supplier_data.csv下载这个文件,步骤如下。

    (1) 打开一个新的电子表格,向其中加入数据,如图 2-1 所示。

    在这里插入图片描述

    图 2-1:向 supplier_data.csv 文件中添加数据

    (2) 将文件保存在桌面上,文件名为 supplier_data.csv。

    要确认 supplier_data.csv 确实是纯文本文件。

    (1) 将所有打开的窗口最小化,在桌面上找到 supplier_data.csv。

    (2) 在文件上点击鼠标右键。

    (3) 选择“Open with”,然后选择一个文本编辑器,如 Notepad、Notepad++ 或 Sublime Text。

    当你在文本编辑器中打开这个文件时,它看上去应该如图 2-2 所示。

    在这里插入图片描述

    图 2-2:Notepad 中的 supplier_data.csv 文件

    正如你所看到的,这个文件是一个简单的纯文本文件。每行包含 5 个由逗号分隔的值。对这种文件的另一种理解是由逗号划定了 Excel 电子表格中的 5 列。现在你可以关闭这个文件了。

    基础Python与pandas

    前言中曾提到过,提供两种版本的代码来完成具体的数据处理任务。第一种代码版本展示了如何使用基础 Python 来完成任务。第二种版本展示了如何使用 pandas 来完成任务。你会看到,使用 pandas 完成任务相对来说更容易,需要的代码更少。所以,如果你已经理解了 pandas 简化了的编程概念和操作,只是要简单完成任务的话,pandas 版的代码就非常有用。但是,先介绍基础 Python 版本的代码,以使你学会如何使用通用的编程概念和操作来完成任务。通过介绍两种代码版本,希望可以给你如下选择:一是使用 pandas 快速完成任务;二是学习通用的编程技能,并在提高编码能力的基础上获得解决问题的能力。

    读写CSV文件

    基础Python,不使用csv模块

    现在开始学习如何使用基础 Python 代码来读写和处理 CSV 文件(不使用内置的 csv 模块)。先看看下面的示例代码,然后当你使用 csv 模块时,就会知道代码在幕后都做了些什么。

    要处理 CSV 文件,先新建一个 Python 脚本,名为 1csv_read_with_simple_parsing_and_write.py。

    在 Spyder 或一个文本编辑器中输入下列代码:

    1 #!/usr/bin/env python3
     2 import sys
     3
     4 input_file = sys.argv[1]
     5 output_file = sys.argv[2]
     6
     7 with open(input_file, 'r', newline='') as filereader:
     8     with open(output_file, 'w', newline='') as filewriter:
     9          header = filereader.readline()
    10          header = header.strip()
    11          header_list = header.split(',')
    12          print(header_list)
    13          filewriter.write(','.join(map(str,header_list))+'\n')
    14          for row in filereader:
    15              row = row.strip()
    16              row_list = row.split(',')
    17              print(row_list)
    18              filewriter.write(','.join(map(str,row_list))+'\n')
    

    在桌面上,将程序保存为 1csv_read_with_simple_parsing_and_write.py。

    图 2-3、图 2-4 和图 2-5 分别展示了使用 Anaconda Spyder、Notepad++(Windows)和 TextWrangler(macOS)编写脚本的界面。

    在这里插入图片描述

    图 2-3:Anaconda Spyder 中的 Python 脚本 1csv_read_with_simple_parsing_and_write.py

    在这里插入图片描述

    图 2-4:Notepad++(Windows)中的 Python 脚本 1csv_read_with_simple_parsing_and_write.py

    在这里插入图片描述

    图 2-5:TextWrangler(macOS)中的 Python 脚本 1csv_read_with_simple_parsing_and_write.py

    在运行脚本并查看输出之前,先研究一下脚本中的代码想做些什么。这里将按照顺序依次讨论每个代码块(下面提到的行编号指的是屏幕截图中的行编号)。

    #!/usr/bin/env python3
    import sys
    

    第 1 行是注释行,可以使脚本在不同的操作系统之间具有可移植性。第 3 行代码导入 Python 内置的 sys 模块,可以使你在命令行窗口中向脚本发送附加的输入。

    input_file = sys.argv[1]
    output_file = sys.argv[2]
    

    第 5 和 6 行代码使用 sys 模块的 argv 参数,它是一个传递给 Python 脚本的命令行参数列表,也就是当你运行脚本时在命令行中输入的内容。下面给出了一个在 Windows 系统中使用命令行参数读取 CSV 格式的输入文件和写入 CSV 格式的输出文件的例子:

    python script_name.py "C:\path\to\input_file.csv" "C:\path\to\output_file.csv"
    

    第一个词 python 告诉计算机使用 Python 程序来处理其余的命令行参数。Python 收集其余的参数,放入 argv 这个特殊的列表中。列表中的第一个元素 argv[0] 用作脚本名称,所以 argv[0] 表示 script_name.py。下一个命令行参数是 “C:\path\to\input_file.csv”,即 CSV 输入文件的路径和文件名。Python 将这个参数保存在 argv[1] 中,所以脚本第 5 行代码将这个值赋给变量 input_file。最后一个命令行参数是 “C:\path\to\output_file.csv”,即 CSV 输出文件的路径和文件名。Python 将这个参数保存在 argv[2] 中,第 6 行代码把这个值赋给了变量 output_file。

    with open(input_file, 'r', newline='') as filereader:
    with open(output_file, 'w', newline='') as filewriter:
    

    第 8 行代码是一个 with 语句,将 input_file 打开为一个文件对象 filereader。‘r’ 表示只读模式,说明打开 input_file 是为了读取数据。第 9 行代码是另一个 with 语句,将 output_file 打开为一个文件对象 filewriter。‘w’ 表示可写模式,说明打开 output_file 是为了写入数据。with 语句非常有用,因为它可以在语句结束时自动关闭文件对象。

    header = filereader.readline()
    header = header.strip()
    header_list = header.split(',')
    

    第 10 行代码使用文件对象的 readline 方法读取输入文件中的第一行数据,在本例中,第一行是标题行,读入后将其作为字符串并赋给名为 header 的变量。第 11 行代码使用 string 模块中的 strip 函数去掉 header 中字符串两端的空格、制表符和换行符,并将处理过的字符串重新赋给 header。第 12 行代码使用 string 模块的 split 函数将字符串用逗号拆分成列表,列表中的每个值都是一个列标题,最后将列表赋给变量 header_list。

    print(header_list)
    filewriter.write(','.join(map(str,header_list))+'\n')
    

    第 13 行代码是一个 print 语句,将 header_list 中的值(也就是列标题)打印到屏幕上。

    第 14 行代码使用 filewriter 对象的 write 方法将 header_list 中的每个值写入输出文件。因为这行代码比较复杂,所以需要仔细说明一下。map 函数将 str 函数应用于 header_list 中的每个元素,确保每个元素都是字符串。然后,join 函数在 header_list 中的每个值之间插入一个逗号,将这个列表转换为一个字符串。在此之后,在这个字符串最后添加一个换行符。最后,filewriter 对象将这个字符串写入输出文件,作为输出文件的第一行。

    for row in filereader:
        row = row.strip()
        row_list = row.split(',')
        print(row_list)
        filewriter.write(','.join(map(str,row_list))+'\n')
    

    第 15 行代码创建了一个 for 循环,在输入文件剩余的各行中迭代。第 16 行代码使用 strip 函数除去每行字符串两端的空格、制表符和换行符,然后将处理过的字符串重新赋给变量 row。第 17 行使代码用 split 函数用逗号将字符串拆分成一个列表,列表中的每个值都是这行中某一列的值,然后,将列表赋给变量 row_list。第 18 行代码将 row_list 中的值打印到屏幕上。第 19 行代码将这些值写入输出文件。

    脚本对输入文件中的每一行数据都执行第 16~19 行代码,因为这 4 行代码在第 15 行代码中的 for 循环下面是缩进的。

    你可以在命令行窗口或终端窗口中通过运行脚本做一下测试。如下所示。

    • 命令行窗口(Windows)

    (1) 打开一个命令行窗口。

    (2) 切换到桌面(你存放 Python 脚本的地方)。

    要完成这个操作,输入以下命令,然后按回车键:

    cd "C:\Users\[Your Name]\Desktop"
    

    (3) 运行 Python 脚本。

    要完成这个操作,输入以下命令,然后按回车键:

    python 1csv_simple_parsing_and_write.py supplier_data.csv\
    output_files\1output.csv
    
    • 终端窗口(macOS)

    (1) 打开一个终端窗口。

    (2) 切换到桌面(你存放 Python 脚本的地方)。

    要完成这个操作,输入以下命令,然后按回车键:

    cd /Users/[Your Name]/Desktop
    

    (3) 为 Python 脚本添加可执行权限。

    要完成这个操作,输入以下命令,然后按回车键:

    chmod +x 1csv_simple_parsing_and_write.py
    

    (4) 运行 Python 脚本。

    要完成这个操作,输入以下命令,然后按回车键:

    ./1csv_simple_parsing_and_write.py supplier_data.csv\
    output_files/1output.csv
    

    如图 2-6 所示,你会看到输出被打印到命令行窗口或终端窗口中。

    在这里插入图片描述

    图 2-6:运行 Python 脚本 1csv_read_with_simple_parsing_and_write.py 的输出结果

    输入文件中的所有行都被打印到了屏幕上,也被写入了输出文件。在多数情况下,你不需要将输入文件中的所有数据重新写到输出文件中,因为输入文件中就有所有的数据。但是这个例子仍然是非常有用的,因为你可以参考例子中的代码,将 filewriter.write 语句嵌入到带有判断条件的业务逻辑中,确保你只将需要的某些行写入输出文件。

    pandas

    要使用 pandas 处理 CSV 文件,在文本编辑器中输入下列代码,并将文件保存为 pandas_parsing_and_write.py(这个脚本读取 CSV 文件,在屏幕上打印文件内容,并将内容写入一个输出文件):

    #!/usr/bin/env python3
    import sys
    import pandas as pd
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    data_frame = pd.read_csv(input_file)
    print(data_frame)
    data_frame.to_csv(output_file, index=False)
    

    要运行这个脚本,在命令行中输入以下命令,命令在不同的操作系统中会有些差别。

    • Windows 操作系统
    python pandas_parsing_and_write.py supplier_data.csv\
    output_files\pandas_output.csv
    
    • macOS 操作系统
    • chmod +x pandas_parsing_and_write.py ./pandas_parsing_and_write .py
      supplier_data.csv\ output_files/pandas_output.csv

    你会注意到在 pandas 版的脚本中,创建了一个变量 data_frame。同列表、字典与元组相似,数据框也是存储数据的一种方式。数据框中保留了“表格”这种数据组织方式,不需要使用列表套列表的方式来分析数据。数据框包含在 pandas 包中,如果你不在脚本中导入 pandas,就不能使用数据框。将变量命名为 data_frame,就像使用变量名 list 一样,在学习阶段,这样做是可以的,但是以后,你应该使用更有描述性的变量名。

    • 脏数据
      现实世界中,数据通常是“脏”的。有些值会因为某些原因而缺失,手工输入或传感器出错都可以造成数据错误。某些情况下,人们会故意记下错误的数据,因为只能这样做。我曾经见过在餐厅收据中,将乐啤露记为“可乐(加奶酪)”,因为结账系统中没有“乐啤露”这个选项,所以使用系统的店员就加入了这个订单选项,并告知了订餐员和打饮料的服务员。但是这样一来,负责跟踪库存和订货的管理人员就有一大堆奇怪的数据需要核实了。

    在电子表格数据中,你也会遇到这样的问题,并想出解决的办法。示例代码时,也要注意这种情况。请记住每个人都会遇到“脏”数据的问题,这是数据分析工作中最令人头疼也是最令人兴奋的部分,通常也是工作量最大的部分,这是必须要做的工作!

    基本字符串分析是如何失败的

    基本的 CSV 分析失败的一个原因是列中包含额外的逗号。打开 supplier_data.csv,将 Cost 列中的最后两个成本数量分别改为 $6,015.00 和 $1,006,015.00。做完这两个修改之后,输入文件应如图 2-7 所示。

    在这里插入图片描述

    图 2-7:修改后的输入文件(supplier_data.csv)

    修改了输入文件之后,要看看你的简单的分析脚本如何失败,需要在修改后的新输入文件上重新运行脚本。保存修改后的文件,然后按向上箭头键,找到之前运行过的命令,或者重新输入以下命令,然后按回车键:

    python 1csv_simple_parsing_and_write.py supplier_data.csv\
    output_files\1output.csv
    

    你会看到输出被打印到屏幕上,如图 2-8 所示。

    在这里插入图片描述

    图 2-8:在修改后的 supplier_data.csv 上运行脚本

    你可以看到,这里的脚本是按照行中的逗号分析每行数据的。此脚本对标题行和前 10 个数据行的处理都是正确的,因为它们没有嵌入到数据中的逗号。但是,脚本错误地拆分了最后两行,因为数据中有逗号。

    有许多方法可以改进这个脚本中的代码,处理包含逗号的数值。例如,可以使用正则表达式来搜索带有嵌入逗号的模式,就像 $6,015.00 和 $1,006,015.00,然后删除这些值中的逗号,再使用余下的逗号来拆分行。但是,为了不使脚本复杂化,可以使用 Python 内置的 csv 模块,设计这个模块的目的就是为了方便灵活地处理复杂的 CSV 文件。

    读写CSV文件(第2部分)

    基础Python,使用csv模块

    使用 Python 内置的 csv 模块处理 CSV 文件的一个优点是,这个模块就是被设计用于正确处理数据值中的嵌入逗号和其他复杂模式的。它可以识别出这些模式并正确地分析数据,所以你不需要仅仅为了正确处理数据而花费时间来设计正则表达式和条件逻辑,可以将节省的时间用来管理数据、执行计算和写入输出。

    接下来导入 Python 内置的 csv 模块并用它来处理包含数值 $6,015.00 和 $1,006,015.00 的输入文件。你将学会如何使用 csv 模块,并理解它是如何处理数据中的逗号的。

    在文本编辑器中输入以下代码,并将文件保存为 2csv_reader_parsing_and_write.py:

     1 #!/usr/bin/env python3
     2 import csv
     3 import sys
     4 input_file = sys.argv[1]
     5 output_file = sys.argv[2]
     6 with open(input_file, 'r', newline='') as csv_in_file:
     7     with open(output_file, 'w', newline='') as csv_out_file:
     8          filereader = csv.reader(csv_in_file, delimiter=',')
     9          filewriter = csv.writer(csv_out_file, delimiter=',')
    10          for row_list in filereader:
    11               print(row_list)
    12               filewriter.writerow(row_list)
    

    你可以看到,上面大部分代码与前一个脚本中的代码非常相似。所以,这里只讨论那些有明显区别的代码。

    第 2 行代码导入 csv 文件,以便可以使用其中的函数来分析输入文件,写入输出文件。

    第 8 行代码,就是在第二个 with 语句下面的那行代码,使用 csv 模块中的 reader 函数创建了一个文件读取对象,名为 filereader,可以使用这个对象来读取输入文件中的行。同样,第 9 行代码使用 csv 模块的 writer 函数创建了一个文件写入对象,名为 filewriter,可以使用这个对象将数据写入输出文件。这些函数中的第二个参数(就是 delimiter=’,’)是默认分隔符,所以如果你的输入文件和输出文件都是用逗号分隔的,就不需要指定这个参数。这里指定了这个分隔符参数,是为了防备你处理的输入文件或要写入的输出文件具有不同的分隔符,例如,分号(;)或制表符(\t)。

    第 12 行代码使用 filewriter 对象的 writerow 函数来将每行中的列表值写入输出文件。

    假设输入文件和 Python 脚本都保存在你的桌面上,你也没有在命令行或终端行窗口中改变目录,在命令行中输入以下命令,然后按回车键运行脚本(如果你使用 Mac,需要对新的脚本先运行 chmod 命令,使它成为可执行的):

    python 2csv_reader_parsing_and_write.py supplier_data.csv\
    output_files\2output.csv
    

    你可以看到输出被打印到屏幕上,如图 2-9 所示。

    在这里插入图片描述

    图 2-9:运行 Python 脚本得到的输出

    输入文件中的所有行都被打印到了屏幕上,同时被写入到输出文件。你可以看到,Python 内置的 csv 模块处理了嵌入数据的逗号问题,正确地将每一行拆分成了 5 个值。

    我们知道了如何使用 csv 模块来读取、处理和写入 CSV 文件,下面开始学习如何筛选出特定的行以及如何选择特定的列,以便可以有效地抽取出需要的数据。

    展开全文
  • VS2010实现对CSV文件操作,读取CSV文件指定行列的字符串数据,整形数据,浮点型数据,同时相应把数据写入到CSV文件
  • 文章目录:1 数据说明2 把数据集文件信息使用python pandas保存成csv文件3 使用python pandas 读取csv的每行、每列数据 1 数据说明 1、在test_data目录下是我们的数据集(我虚构的,只是为了说明下面的处理过程) ...

    1 数据说明

    1、在test_data目录下是我们的数据集(我虚构的,只是为了说明下面的处理过程)

    图片来源这里,不要问,没有联系方式!
    在这里插入图片描述

    • 每张图片名中的数字是样本数据的标签label
    • 这里我们的数据规模大小是5张数据

    2、数据保存成csv文件要求

    • 每一行代表一个样本
    • 每一行的第一列表示文件的路径,每一行的第二列表示样本的标签

    2 把数据集文件信息使用python pandas保存成csv文件

    1、根据上面保存成csv文件的要求,把数据集相关信息保存到csv文件中:

    # coding=utf-8
    """
    Copyright (c) 2018-2022. All Rights Reserved.
    
    @author: shliang
    @email: shliang0603@gmail.com
    
    创建和导入csv文件
    """
    
    
    import pandas as pd
    import glob
    import os
    import numpy as np
    
    # 创建csv文件
    def create_csv_file():
        '''
        把test_data目录下的文件绝对路径保存到csv文件中,同时把文件名中的label也保存下来
        保存两列  filename, label
        :return:
        '''
        img_paths_list = glob.glob("../test_data/*.png")
        labes_list = []
        img_label_list = []
        for path in img_paths_list:
            img_name = os.path.split(path)[-1]
            prefix = os.path.splitext(img_name)[0]
            label = prefix.split('_')[-1]
            labes_list.append(str(label))
            # abspath = os.path.abspath(path)
            img_label_list.append([path, label])
    
    
        # 通过zip函数组合每一个样本的path和label: (path, label)
        print(img_paths_list)
        print(labes_list)
        img_label_list2 = list(zip(img_paths_list, labes_list))
        print(img_label_list)
        print(img_label_list2)
    
        # 保存数据data格式,嵌套列表,每个子列表中表示每一行数据
        # df = pd.DataFrame(data=np.array([[img0, label0],[img1, label1],...,[img4, label4]]),
        #                   columns=['filepath', 'label'])
        df1 = pd.DataFrame(data=img_label_list,
                          columns=['filepath', 'label'])
        df1.to_csv('../test_data/filename1.csv')
        df1.to_csv('../test_data/filename2.csv', index=False)
    
        # 保存数据data格式,列表中嵌套元组,每个元组中表示每一行数据
        df3 = pd.DataFrame(data=img_label_list2,
                          columns=['filepath', 'label'])
        df3.to_csv('../test_data/filename3.csv')
    
        # 保存数据data格式,字典格式,key表示列名,value是列表,表示每一列数据
        df4 = pd.DataFrame({"filename": img_paths_list, "label": labes_list})
        df4.to_csv('../test_data/filename4.csv')
    
    if __name__ == '__main__':
        create_csv_file()
    

    输出结果:

    在这里插入图片描述

    2、pd.DataFrame(data, columns)的参数

    data参数:是输入要保存的数据

    该参数的值有几种输入格式,都是可以的:

    • 1)numpy格式data=np.array([[img0, label0],[img1, label1],...,[img4, label4]]
    • 2)列表嵌套列表格式:保存数据data格式,嵌套列表,每个子列表中表示每一行数据:data=[[img0, label0],[img1, label1],...,[img4, label4]]
    • 3)列表嵌套元组格式:保存数据data格式,列表中嵌套元组,每个元组中表示每一行数据:data=[(img0, label0),(img1, label1),...,(img4, label4)]
    • 4)字典格式:保存数据data格式,字典格式,key表示列名,value是列表,表示每一列数据:data={'columns_name1':[img0, img1,...,img4], 'columns_name2': [label0, label1,...,label4]}

    columns参数是每一列的列名,值是列名的列表

    3、df1.to_csv('../test_data/filename1.csv')的参数,这里只说两个比较常用的参数

    • path_or_buf参数:保存csv文件名
    • index参数:默认值是True,表示保存每行的行索引,如果设置位False表示不保存行索引!

    filename1.csv:默认是保存了行索引(filename3.csv和filename4.csv的内容也是如下,一样的!)

    在这里插入图片描述

    filename2.csv:没有保存行索引

    在这里插入图片描述

    注意:

    我们一般保存的CSV文件是不需要保存索引的,直接设置为False吧,否则这个索引也会作为单独的一列数据

    3 使用python pandas 读取csv的每行、每列数据

    1、直接上代码,我打印出了每一步的结果,方便大家理解!

    # coding=utf-8
    """
    Copyright (c) 2018-2022. All Rights Reserved.
    
    @author: shliang
    @email: shliang0603@gmail.com
    
    创建和导入csv文件
    """
    
    
    import pandas as pd
    import glob
    import os
    import numpy as np
    
    # 读取csv文件
    def read_csv_file():
        '''
        下面我们来读取数据拿到上面创建的csv文件,主要操作:
        - 读取每一行数据:一行代表一个样本
        - 读取每一列数据:一列表示所有样本的一个属性
        :return:
        '''
        data_info1 = pd.read_csv('../test_data/filename1.csv')
        data_info2 = pd.read_csv('../test_data/filename2.csv')
    
        print(type(data_info1))  # <class 'pandas.core.frame.DataFrame'>
    
        # 查看前几行数据
        print(data_info1.head())  # 默认查看前5行数据
        print(data_info1.head(3))  # 指定查看的数据行数
        print(data_info2.head())
        '''
               Unnamed: 0                 filepath  label
        0           0  ../test_data\test_0.png      0
        1           1  ../test_data\test_1.png      1
        2           2  ../test_data\test_2.png      2
        3           3  ../test_data\test_3.png      3
        4           4  ../test_data\test_4.png      4
           Unnamed: 0                 filepath  label
        0           0  ../test_data\test_0.png      0
        1           1  ../test_data\test_1.png      1
        2           2  ../test_data\test_2.png      2
                          filepath  label
        0  ../test_data\test_0.png      0
        1  ../test_data\test_1.png      1
        2  ../test_data\test_2.png      2
        3  ../test_data\test_3.png      3
        4  ../test_data\test_4.png      4
        '''
    
        # 获取数据的行和列数据
        print(data_info1.shape)  # (5, 3)   # 5行、3列数据,每一行表示一个样本数据,这里的第一列是行索引
        print(data_info2.shape)  # (5, 2)
    
        # 获取每一列的数据类型
        print(data_info1.dtypes)
        print(data_info2.dtypes)
        '''
        Unnamed: 0     int64
        filepath      object
        label          int64
        dtype: object
        filepath    object
        label        int64
        dtype: object
        '''
    
        ################################################################################################
        # 获取列名
        columns1 = data_info1.columns
        columns2 = data_info2.columns
        print('coloumns1:', columns1)
        print('coloumns2:', columns2)
        # 把列名转换成列表   to_list() 或 tolist() 两种方法是一样的,源码中有赋值to_list = tolist
        columns1_list = data_info1.columns.tolist()
        columns2_list = data_info2.columns.to_list()
        print('coloumns1 list:', columns1_list)
        print('coloumns2 list:', columns2_list)
        '''
        coloumns1: Index(['Unnamed: 0', 'filepath', 'label'], dtype='object')
        coloumns2: Index(['filepath', 'label'], dtype='object')
        coloumns1 list: ['Unnamed: 0', 'filepath', 'label']
        coloumns2 list: ['filepath', 'label']
        '''
    
        # 获取指定列数据
        filenames1 = data_info1['filepath']
        filenames2 = data_info1[['filepath']]
        # 获取指定多列数据,把要获取的列名放到一个列表中,确保你的列名正确并存在,否则报KeyError
        filenames3 = data_info1[['filepath', 'label']]
        print('filenames1:', filenames1)
        print('filenames2:', filenames2)
        print('filenames3:', filenames3)
        # 把获取的某一列数转换成列表
        filename1_list = data_info1['filepath'].tolist()
        print('filenames1 list:', filename1_list)
        '''
            filenames1: 0    ../test_data\test_0.png
        1    ../test_data\test_1.png
        2    ../test_data\test_2.png
        3    ../test_data\test_3.png
        4    ../test_data\test_4.png
        Name: filepath, dtype: object
        filenames2:                   filepath
        0  ../test_data\test_0.png
        1  ../test_data\test_1.png
        2  ../test_data\test_2.png
        3  ../test_data\test_3.png
        4  ../test_data\test_4.png
        filenames3:                   filepath  label
        0  ../test_data\test_0.png      0
        1  ../test_data\test_1.png      1
        2  ../test_data\test_2.png      2
        3  ../test_data\test_3.png      3
        4  ../test_data\test_4.png      4
        filenames1 list: ['../test_data\\test_0.png', '../test_data\\test_1.png', '../test_data\\test_2.png', '../test_data\\test_3.png', '../test_data\\test_4.png']
        '''
        ################################################################################################
        # 获取某些行数据
    
        # 去除指定的某一行数据,索引是从0开始的,如下是取出第3行数据。(如果超过行索引会报KeyError)
        # object 表示字符串类型的值
        line3 = data_info2.loc[2]
        print(line3)
        '''
        filepath    ../test_data\test_2.png
        label                             2
        Name: 2, dtype: object
        '''
        # 取出指定的某一行数据,并转换成列表
        line3_list = data_info2.loc[2].tolist()
        print('line3 list:', line3_list)  # line3 list: ['../test_data\\test_2.png', 2]
    
        # 取出指定的多行数据,如下取出第2行和第4行数据
        multi_line_data = data_info2.loc[[1, 3]]
        print(multi_line_data)  #  得到的对象是DateFrame,还可以对齐进行行列等操作
        '''
                          filepath  label
        1  ../test_data\test_1.png      1
        3  ../test_data\test_3.png      3
        '''
    
        # 取出连续多行数据,如下取出第2到第5行数据
        mulut_conti_line_data = data_info2.loc[1:5]
        print(mulut_conti_line_data)   # 得到的对象是DateFrame,还可以对齐进行行列等操作
        '''
                          filepath  label
        1  ../test_data\test_1.png      1
        2  ../test_data\test_2.png      2
        3  ../test_data\test_3.png      3
        4  ../test_data\test_4.png      4
        '''
    
    
        # 对DataFrame的每一行进行循环
        for index, row in data_info2.iterrows():
            # print(row)
            '''
            filepath    ../test_data\test_0.png
            label                             0
            Name: 0, dtype: object
            '''
    
            # 然后根据列名,获取指定的行对应指定列的数据
            filepath = row['filepath']
            label = row['label']
            print(filepath, label)  # ../test_data\test_0.png 0
    
    if __name__ == '__main__':
        read_csv_file()
    

    如果你想了解更多关于pandas的使用技巧可以参考这篇文章

    展开全文
  • Python处理CSV文件(二)

    千次阅读 2021-02-27 23:43:05
    你应该很熟悉如何在 Excel 中手动筛选行,使你既能处理因为体积太大以致 Excel 不能打开的 CSV 文件,又能处理多个 CSV 文件。因为要通过手动处理这些文件,时间花费太多了。 下面演示了在输入文件中筛选出特定行的 ...

    筛选特定的行

    有些时候,你并不需要文件中所有的数据。例如,你可能只需要一个包含特定词或数字的行的子集,或者是与某个具体日期关联的行的子集。在这些情况下,可以用 Python 筛选出特定的行来使用。

    你应该很熟悉如何在 Excel 中手动筛选行,使你既能处理因为体积太大以致 Excel 不能打开的 CSV 文件,又能处理多个 CSV 文件。因为要通过手动处理这些文件,时间花费太多了。

    下面演示了在输入文件中筛选出特定行的 3 种方法:

    • 行中的值满足某个条件
    • 行中的值属于某个集合
    • 行中的值匹配于某个模式(正则表达式)

    接下来会详细解释这种通用结构,使你可以轻松地修改代码来满足自己的业务规则。

    请注意以下结构,从而来理解如何从输入文件中筛选出特定的行:

    for row in filereader:
        ***if value in row meets some business rule or set of rules:***
            do something
        else:
            do something else
    

    这段伪代码展示了用来在输入文件中筛选出特定行的通用代码结构。在下面,会修改封装在 *** 之间的代码,以使脚本能够满足具体业务规则,抽取出你需要的数据。

    行中的值满足某个条件

    基础Python

    有些时候,当行中的值满足一个具体条件时,才需要保留这些行。例如,你可能会希望在数据集中保留那些成本高于某个具体阈值的行,或者希望保留所有购买日期在一个具体日期之前的行。在这种情况下,你可以检验行中的值是否满足具体的条件,然后筛选出满足条件的行。

    下面的示例演示了检验行值是否满足两个具体条件的方法,并将满足条件的行的子集写入一个输出文件。在这个示例中,保留供应商名字为 Supplier Z 或成本大于 $600.00 的行,并将结果写入输出文件。要筛选出满足这些条件的行的子集,在文本编辑器中输入以下代码,将文件保存为 3csv_reader_value_meets_condition.py:

     1 #!/usr/bin/env python3
     2 import csv
     3 import sys
     4 input_file = sys.argv[1]
     5 output_file = sys.argv[2]
     6 with open(input_file, 'r', newline='') as csv_in_file:
     7     with open(output_file, 'w', newline='') as csv_out_file:
     8          filereader = csv.reader(csv_in_file)
     9          filewriter = csv.writer(csv_out_file)
    10          header = next(filereader)
    11          filewriter.writerow(header)
    12          for row_list in filereader:
    13               supplier = str(row_list[0]).strip()
    14               cost = str(row_list[3]).strip('$').replace(',', '')
    15               if supplier == 'Supplier Z' or float(cost) > 600.0:
    16                    filewriter.writerow(row_list)
    

    第 10 行代码使用 csv 模块的 next 函数读出输入文件的第一行,赋给名为 header 的列表变量。第 11 行代码将标题行写入输出文件。

    第 13 行代码取出每行数据中的供应商名字,并赋给名为 supplier 的变量。这行代码使用列表索引取出每行数据的第一个值 row[0],然后使用 str 函数将其转换为一个字符串。在此之后,使用 strip 函数删除字符串两端的空格、制表符和换行符。最后,将处理好的字符串赋给变量 supplier。

    第 14 行代码取出每行数据中的成本,并赋给名为 cost 的变量。这行代码使用列表索引取出每行数据的第四个值 row[3],然后使用 str 函数将其转换为一个字符串。在此之后,使用 strip 函数从字符串中删除美元符号。接着使用 replace 函数从字符串中删除逗号。最后,将处理好的字符串赋给变量 cost。

    第 15 行代码创建了一个 if 语句,来检验每行中的这两个值是否满足条件。具体来说,这里想筛选出供应商名字为 Supplier Z 或者成本大于 $600.00 的那些行。if 和 or 之间的第一个条件检验变量 supplier 中的值是否为 Supplier Z。or 和冒号之间的第二个条件检验变量 cost 中的值在被转换为浮点数之后,是否大于 600.0。

    第 16 行代码使用 filewriter 的 writerow 函数将满足条件的行写入输出文件。

    要运行这个脚本,输入以下命令,然后按回车键:

    python 3csv_reader_value_meets_condition.py supplier_data.csv\
    output_files\3output.csv
    

    在屏幕上你不会看到任何输出,但可以打开输出文件 3output.csv 看一下结果。检查一下,确保结果正确,然后可以修改一下代码,设定不同的供应商或成本阈值,试着筛选一下其他数据。

    pandas

    pandas 提供了一个 loc 函数,可以同时选择特定的行与列。你需要在逗号前面设定行筛选条件,在逗号后面设定列筛选条件。下面的 loc 函数中的条件设置为:Supplier Name 列中姓名包含 Z,或者 Cost 列中的值大于 600.0,并且需要所有的列。在文本编辑器中输入以下代码,将文件保存为 pandas_value_meets_condition.py(这个脚本使用 pandas 来分析 CSV 文件,并将满足条件的行写入输出文件)。

    #!/usr/bin/env python3
    import pandas as pd
    import sys
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    data_frame = pd.read_csv(input_file)
    data_frame['Cost'] = data_frame['Cost'].str.strip('$').astype(float)
    data_frame_value_meets_condition = data_frame.loc[(data_frame['Supplier Name']\
    .str.contains('Z')) | (data_frame['Cost'] > 600.0), :]
    data_frame_value_meets_condition.to_csv(output_file, index=False)
    

    在命令行中运行脚本,并给出数据源文件和输出文件。

    python pandas_value_meets_condition.py supplier_data.csv\
    output_files\pandas_output.csv
    

    在屏幕上你不会看到任何输出,但可以打开输出文件 pandas_output.csv 看一下结果。试试修改一下 loc 函数中的参数,选择出另外一些数据。

    行中的值属于某个集合

    基础Python

    有些时候,当行中的值属于某个集合时,才需要保留这些行。例如,你可能会希望在数据集中保留那些供应商名字属于集合 {Supplier X, Supplier Y} 的行(这里的花括号表示集合,不是 Python 中的字典),或者希望保留所有购买日期属于集合 {‘1/20/14’, ‘1/30/14’} 的行。在这种情况下,你可以检验行中的值是否属于某个集合,然后筛选出具有属于该集合的值的行。

    下面的示例演示了检验行值是否是集合成员的方法,并将具有集合中的值的行写入到输出文件。在这个示例中,是要保留那些购买日期属于集合 {‘1/20/14’, ‘1/30/14’} 的行,并将结果写入输出文件。要筛选出值属于这个集合的行的子集,在文本编辑器中输入以下代码,并将文件保存为 4csv_reader_value_in_set.py:

     1 #!/usr/bin/env python3
     2 import csv
     3 import sys
     4 input_file = sys.argv[1]
     5 output_file = sys.argv[2]
     6 important_dates = ['1/20/14', '1/30/14']
     7 with open(input_file, 'r', newline='') as csv_in_file:
     8     with open(output_file, 'w', newline='') as csv_out_file:
     9          filereader = csv.reader(csv_in_file)
    10          filewriter = csv.writer(csv_out_file)
    11          header = next(filereader)
    12          filewriter.writerow(header)
    13          for row_list in filereader:
    14               a_date = row_list[4]
    15               if a_date in important_dates:
    16                    filewriter.writerow(row_list)
    

    第 6 行代码创建了一个名为 important_dates 的列表变量,其中包含两个特定日期,这个变量就是你的集合。创建包含特定值的变量,然后在代码中引用变量,这种编写代码的方式非常有用。使用了这种方式,如果变量值发生了变化,你只需在一个地方修改代码(就是定义变量的地方),变量值的变化就会反映到代码中所有引用该变量的地方。

    第 14 行代码取出每一行的购买日期,并将其赋给变量 a_date。从行列表的索引值 row[4] 可知,购买日期在第 5 列。

    第 15 行代码创建了一个 if 语句来检验 a_date 变量中的购买日期是否属于 important_dates 这个集合。如果变量值在集合中,下一行代码就将这一行写入输出文件。

    在命令行中运行下面脚本:

    python 4csv_reader_value_in_set.py supplier_data.csv output_files/4output.csv
    

    你可以打开输出文件 4output.csv 来检查结果。

    pandas

    当行中的值属于某个集合时,如何使用 pandas 筛选出这些行呢?在文本编辑器中输入以下代码,然后将文件保存为 pandas_value_in_set.py(这个脚本分析 CSV 文件,并将值属于某个集合的行写入输出文件):

    #!/usr/bin/env python3
    import pandas as pd
    import sys
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    data_frame = pd.read_csv(input_file)
    important_dates = ['1/20/14', '1/30/14']
    data_frame_value_in_set = data_frame.loc[data_frame['Purchase Date'].\
    isin(important_dates), :]
    data_frame_value_in_set.to_csv(output_file, index=False)
    

    这里最重要的新命令就是简洁的 isin。

    和以前一样,在命令行中运行脚本,并给出源数据文件名和输出文件名:

    python pandas_value_in_set.py supplier_data.csv output_files\pandas_output.csv
    

    你可以打开输出文件 pandas_output.csv 来检查结果。

    行中的值匹配于某个模式/正则表达式

    基础Python

    有些时候,当行中的值匹配了或包含了一个特定模式(也就是正则表达式)时,才需要保留这些行。例如,你可能会希望在数据集中保留所有发票编号开始于“001-”的行,或者希望保留所有供应商名字中包含“Y”的行。在这种情况下,你可以检验行中的值是否匹配或包含某种模式,然后筛选出匹配了或包含了该模式的行。

    下面的示例演示了如何检验某个值是否匹配特定的模式,并将具有这种值的行写入输出文件。在这个示例中,保留发票编号由“001-”开头的行,并将结果写入一个输出文件。要筛选出某个值匹配了这个模式的行,在文本编辑器中输入下列代码,然后将文件保存为 5csv_reader_value_matches_pattern.py:

     1 #!/usr/bin/env python3
     2 import csv
     3 import re
     4 import sys
     5 input_file = sys.argv[1]
     6 output_file = sys.argv[2]
     7 pattern = re.compile(r'(?P<my_pattern_group>^001-.*)', re.I)
     8 with open(input_file, 'r', newline='') as csv_in_file:
     9     with open(output_file, 'w', newline='') as csv_out_file:
    10          filereader = csv.reader(csv_in_file)
    11          filewriter = csv.writer(csv_out_file)
    12          header = next(filereader)
    13          filewriter.writerow(header)
    14          for row_list in filereader:
    15               invoice_number = row_list[1]
    16               if pattern.search(invoice_number):
    17                    filewriter.writerow(row_list)
    

    第 3 行代码导入正则表达式(re)模块,这样就可以使用 re 模块中的函数了。

    第 7 行代码使用 re 模块的 compile 函数创建一个名为 pattern 的正则表达式变量。r 表示将单引号之间的模式当作原始字符串来处理。

    元字符 ?P<my_pattern_group> 捕获了名为 <my_pattern_group> 的组中匹配了的子字符串,以便在需要时将它们打印到屏幕或写入文件。

    这里要搜索的实际模式是001-.*。插入符号()是一个特殊符号,表示只在字符串开头搜索模式。所以,字符串需要以“001-”开头。句点 . 可以匹配任何字符,除了换行符。所以除换行符之外的任何字符都可以跟在“001-”后面。最后,* 表示重复前面的字符 0 次或更多次。.* 组合在一起用来表示除换行符之外的任意字符可以在“001-”后面出现任意次。更通俗的说法是:字符串在“-”后面可以包含任意值,只要字符串开始于“001-”,就会匹配正则表达式。

    最后,参数 re.I 告诉正则表达式进行大小写敏感的匹配。此参数在这个示例中不是太重要,因为模式是数值型的,但是它说明了在模式中包含字符并且需要进行大小写敏感的匹配时,应该如何设置参数。

    第 15 行代码使用列表索引从行中取出发票编号,并赋给变量 invoice_number。在下一行中,将在这个变量中寻找模式。

    第 16 行代码使用 re 模块的 search 函数在 invoice_number 的值中寻找模式。如果模式出现在 invoice_number 值中,第 17 行代码就将这行写入输出文件。

    要运行这个脚本,在命令行中输入以下命令,然后按回车键:

    python 5csv_reader_value_matches_pattern.py supplier_data.csv\
    output_files\5output.csv
    

    你可以打开输出文件 5output.csv 来查看结果。

    pandas

    要使用 pandas 筛选出匹配于某个模式的行,在文本编辑器中输入下列代码,然后将文件保存为 pandas_value_matches_pattern.py(这个脚本读取 CSV 文件,将匹配于某个模式的行打印在屏幕上,并将同样的行写入输出文件):

    #!/usr/bin/env python3
    import pandas as pd
    import sys
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    data_frame = pd.read_csv(input_file)
    data_frame_value_matches_pattern = data_frame.loc[data_frame['Invoice Number'].\
    str.startswith("001-"), :]
    data_frame_value_matches_pattern.to_csv(output_file, index=False)
    

    使用 pandas 时,可以使用 startwith 函数来搜索数据,不用再使用笨重冗长的正则表达式了。要运行这个脚本,在命令行中输入以下命令,然后按回车键:

    python pandas_value_matches_pattern.py supplier_data.csv\
    output_files\pandas_output.csv
    

    你可以打开输出文件 pandas_output.csv 查看一下结果。

    选取特定的列

    有些时候,你并不需要文件中所有的列。可以使用 Python 选取出你需要的列。

    有两种通用方法可以在 CSV 文件中选取特定的列。下面演示了这两种方法:

    • 使用列索引值
    • 使用列标题

    列索引值

    基础Python

    在 CSV 文件中选取特定列的一种方法是使用你想保留的列的索引值。当你想保留的列的索引值非常容易识别,或者在处理多个输入文件时,各个输入文件中列的位置一致(也就是不会发生改变)的时候,这种方法非常有效。例如,如果你只需要保留数据的第一列和最后一列,那么你可以使用 row[0] 和 row[-1] 来将每行的第一个值和最后一个值写入文件。

    在这个示例中,你只想保留供应商姓名和成本这两列。要使用索引值选取这两列,在文本编辑器中输入下列代码,然后将文件保存为 6csv_reader_column_by_index.py:

     1 #!/usr/bin/env python3
     2 import csv
     3 import sys
     4 input_file = sys.argv[1]
     5 output_file = sys.argv[2]
     6 my_columns = [0, 3]
     7 with open(input_file, 'r', newline='') as csv_in_file:
     8     with open(output_file, 'w', newline='') as csv_out_file:
     9          filereader = csv.reader(csv_in_file)
    10          filewriter = csv.writer(csv_out_file)
    11          for row_list in filereader:
    12              row_list_output = [ ]
    13              for index_value in my_columns:
    14                  row_list_output.append(row_list[index_value])
    15              filewriter.writerow(row_list_output)
    

    第 6 行代码创建了一个列表变量 my_columns,其中包含了你想保留的两列的索引值。在这个示例中,这两个索引值对应着供应商姓名和成本列。再说一次,应该创建一个包含索引值的变量,然后在代码中引用这个变量。这样,如果索引值需要改变的话,你只需要在一个地方(就是定义 my_columns 的地方)修改即可,修改会反映到代码中所有引用 my_columns 的地方。

    第 12~15 行代码是 for 循环下面缩进的部分,所以对于输入文件中的每一行都要执行这些代码。第 12 行代码创建了一个空列表变量 row_list_output。这个变量保存你在每行中要保留的值。第 13 行代码是一个 for 循环语句,在 my_cloumns 中的各个索引值之间进行迭代。第 14 行代码通过列表的 append 函数使用每行中 my_columns 索引位置的值为 row_list_output 填充元素。这 3 行代码生成了一个列表,列表中包含了每行中你要写入输出文件的值。创建列表是有用的,因为 filewriter 的 writerow 方法需要一个字符串序列或数值序列,而列表 row_list_out 正是一个字符串序列。第 15 行代码将 row_list_output 中的值写入输出文件。

    脚本会对输入文件中的每一行执行这些代码。为了确切地理解这一系列操作,下面来看看第一次外部 for 循环做了些什么。在本例中,你处理的是输入文件中的第一行(也就是标题行)。第 12 行代码创建了空列表变量 row_list_output。第 13 行代码是一个 for 循环,在 my_columns 的值之间迭代。

    第一次循环时,index_value 等于 0,所以第 14 行代码中的 append 函数将 row[0](就是供应商姓名字符串)加入 row_list_output。此后,代码回到第 13 行中的 for 循环,这一次 index_value 等于 3。因为 index_value 等于 3,所以第 14 行代码中的 append 函数将 row[3](也就是成本字符串)加入 row_list_output。my_columns 中没有更多的值了,所以第 13 行中的 for 循环结束,代码前进到第 15 行。第 15 行代码将 row_list_output 中的列表值写入输出文件。然后,代码回到第 11 行中的外部 for 循环,开始处理输入文件中的下一行。

    要运行这个脚本,在命令行中输入以下命令,然后按回车键:

    python 6csv_reader_column_by_index.py supplier_data.csv output_files\6output.csv
    

    你可以打开输出文件 6output.csv 查看一下结果。

    pandas

    要使用 pandas 根据索引值选取列,在文本编辑器中输入下列代码,然后将文件保存为 pandas_column_by_index.py(这个脚本读取 CSV 文件,将索引值为 0 和 3 的列打印到屏幕,并将同样的行写入输出文件):

    #!/usr/bin/env python3
    import pandas as pd
    import sys
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    data_frame = pd.read_csv(input_file)
    data_frame_column_by_index = data_frame.iloc[:, [0, 3]]
    data_frame_column_by_index.to_csv(output_file, index=False)
    

    这里使用了 iloc 函数来根据索引位置选取列。

    在命令行中运行以下脚本:

    python pandas_column_by_index.py supplier_data.csv\
    output_files\pandas_output.csv
    

    你可以打开输出文件 pandas_output.csv 查看一下结果。

    列标题

    基础Python

    在 CSV 文件中选取特定列的第二种方法是使用列标题,而不是索引位置。当你想保留的列的标题非常容易识别,或者在处理多个输入文件时,各个输入文件中列的位置会发生改变,但标题不变的时候,这种方法非常有效。

    举例来说,假设你只需要保留发票号码列和购买日期列。要使用列标题选取这两列,在文本编辑器中输入下列代码,然后将文件保存为 7csv_reader_column_by_name.py:

     1 #!/usr/bin/env python3
     2 import csv
     3 import sys
     4 input_file = sys.argv[1]
     5 output_file = sys.argv[2]
     6 my_columns = ['Invoice Number', 'Purchase Date']
     7 my_columns_index = []
     8 with open(input_file, 'r', newline='') as csv_in_file:
     9     with open(output_file, 'w', newline='') as csv_out_file:
    10          filereader = csv.reader(csv_in_file)
    11          filewriter = csv.writer(csv_out_file)
    12          header = next(filereader, None)
    13          for index_value in range(len(header)):
    14              if header[index_value] in my_columns:
    15                   my_columns_index.append(index_value)
    16          filewriter.writerow(my_columns)
    17          for row_list in filereader:
    18              row_list_output = [ ]
    19              for index_value in my_columns_index:
    20              row_list_output.append(row_list[index_value])
    21          filewriter.writerow(row_list_output)
    

    这个示例中的代码比上一个示例要稍微长一点,但是所有代码看起来都很熟悉。此示例中有更多代码的唯一原因就是,你需要先单独处理一下标题行,识别出相应标题行对应的索引值。然后你可以使用索引值保留每行中的值,这些值和要保留的列标题具有同样的索引值。

    第 6 行代码创建了一个列表变量 my_columns,其中包含了两个字符串,即要保留的两列的名字。第 7 行代码创建了一个空列表变量 my_columns_index,要使用两个保留列的索引值来填充它。

    第 12 行代码在 filereader 对象上使用 next 函数从输入文件中读出第一行,并保存在列表变量 header 中。第 13 行代码初始化在列标题的索引值中迭代的 for 循环。

    第 14 行代码使用 if 语句和列表索引来检验每个列标题是否在 my_columns 中。例如,第一次 for 循环时,index_value 等于 0,所以 if 语句检验 header[0](也就是第一个列标题供应商姓名)是否在 my_columns 中。因为供应商姓名不在 my_columns 中,所以第 15 行代码不会对这个值执行。

    代码返回第 13 行中的 for 循环,这一次 index_value 等于 1。然后,第 14 行代码中的 if 语句检验 header[1](也就是第二个列标题发票号码)是否在 my_columns 中。因为发票号码在 my_columns 中,所以执行第 15 行代码,将这列的索引值加入到 my_columns_index 列表中。

    然后继续 for 循环,最后将购买日期列的索引值加入 my_columns_index。一旦 for 循环结束,第 16 行代码就将 my_columns 中的两个字符串写入输出文件。

    第 18~21 行代码处理输入文件中余下的数据行。第 18 行代码创建一个空列表 row_list_output 来保存你要在每一行中保留的值。第 19 行代码中的 for 循环在 my_columns_index 中的索引值之间迭代,第 20 行代码将数据行中具有这些索引值的值加入 row_list_output。最后,第 21 行代码将 row_list_output 中的值写入输出文件。

    在命令行中运行以下脚本:

    python 7csv_reader_column_by_name.py supplier_data.csv output_files\7output.csv
    

    你可以打开输出文件 7output.csv 查看一下结果。

    pandas

    要使用 pandas 根据列标题选取列,在文本编辑器中输入下列代码,然后将文件保存为 pandas_column_by_name.py(这个脚本读取 CSV 文件,将发票号码列与购买日期列打印到屏幕,并将同样的列写入输出文件):

    #!/usr/bin/env python3
    import pandas as pd
    import sys
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    data_frame = pd.read_csv(input_file)
    data_frame_column_by_name = data_frame.loc[:, ['Invoice Number', 'Purchase Date']]
    data_frame_column_by_name.to_csv(output_file, index=False)
    

    这里又一次使用 loc 函数来选取列,这次使用的是列标题。

    运行以下脚本:

    python pandas_column_by_name.py supplier_data.csv output_files\pandas_output.csv
    

    你可以打开输出文件 pandas_output.csv 查看一下结果。

    选取连续的行

    有些时候,在文件内容中,工作表头部和尾部都是你不想处理的。例如,文件头部可能是标题和作者信息,文件尾部也可能会列出来源、假设、附加说明和注意事项。在很多情况下,你不需要处理这些内容。

    为了演示如何在 CSV 文件中选取连续的行,需要对输入文件做如下修改。

    (1) 在电子表格软件中打开 supplier_data.csv。

    (2) 在文件头部插入 3 行,就在列标题那行的上面。

    在 A1:A3 单元格中随便写一些文字,比如“I don’t care about this line”。

    (3) 在文件尾部,也就是最后一行数据下面插入 3 行。

    在最后一行数据下面 A 列的 3 个单元格中随便写一些文字,比如“I don’t want this line either”。

    (4) 将文件保存为 supplier_data_unnecessary_header_footer.csv。这个文件应该如图 2-10 所示。

    在这里插入图片描述

    图 2-10:在你需要的行上方和下方具有无关数据的 CSV 文件

    现在输入文件中包含了你不需要的头部和尾部信息,修改一下 Python 脚本,使它不读取这些行。

    基础Python

    要使用基础 Python 选取特定行,这里使用 row_counter 变量来跟踪行编号,以便可以识别和选取想保留的行。从前面的示例中,你已经知道了要保留 13 行数据。在下面的 if 代码块中,你可以看到你要写入输出文件中的行就是行索引大于等于 3 并小于等于 15 的行。

    要使用基础 Python 选取这些行,在文本编辑器中输入下列代码,然后将文件保存为 11csv_reader_select_contiguous_rows.py:

     1 #!/usr/bin/env python3
     2 import csv
     3 import sys
     4 input_file = sys.argv[1]
     5 output_file = sys.argv[2]
     6 row_counter = 0
     7 with open(input_file, 'r', newline='') as csv_in_file:
     8     with open(output_file, 'w', newline='') as csv_out_file:
     9          filereader = csv.reader(csv_in_file)
    10          filewriter = csv.writer(csv_out_file)
    11          for row in filereader:
    12              if row_counter >= 3 and row_counter <= 15:
    13                   filewriter.writerow([value.strip() for value in row])
    14              row_counter += 1
    

    这里使用 row_counter 变量和一个 if 语句来保留需要的行,跳过那些不需要的头部和尾部内容。对于输入文件的前 3 行,因为 row_counter 小于 3,所以不执行 if 代码块,并将 row_counter 的值增加 1。

    对于输入文件的最后 3 行,row_counter 大于 15,所以也不执行 if 代码块,并将 row_counter 的值增加 1。

    你要保留的行在无用的头部和尾部之间。对于这些行,row_counter 在 3 和 15 之间。if 代码块处理这些行并将它们写入输出文件。在列表生成式中使用 string 模块的 strip 函数除去每行两端的空格、制表符和换行符。

    如果想看看 row_counter 变量的值和每行的内容,可以在现有的 writerow 语句上面加上一个 print 语句,比如 print(row_counter, [value.strip() for value in row])。

    要运行这个脚本,在命令行中输入以下命令,然后按回车键:

    python 11csv_reader_select_contiguous_rows.py supplier_data_unnecessary_header_\
    footer.csv output_files\11output.csv
    

    你可以打开输出文件 11output.csv 查看一下结果。

    pandas

    pandas 提供了 drop 函数根据行索引或列标题来丢弃行或列。在下面的脚本中,drop 函数从输入文件中丢弃前 3 行和最后 3 行(也就是行索引为 0,1,2 和 16,17,18 的那些行)。pandas 还提供了功能强大的 iloc 函数,你可以使用这个函数根据行索引选取一个单独行作为列索引。最后,使用 reindex 函数为数据框重新生成索引。

    使用 pandas 可以保留列标题行和数据行,除去不需要的头部和尾部。在文本编辑器中输入下列代码,并将文件保存为 pandas_select_contiguous_rows.py:

    #!/usr/bin/env python3
    import pandas as pd
    import sys
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    data_frame = pd.read_csv(input_file, header=None)
    data_frame = data_frame.drop([0,1,2,16,17,18])
    data_frame.columns = data_frame.iloc[0]
    data_frame = data_frame.reindex(data_frame.index.drop(3))
    data_frame.to_csv(output_file, index=False)
    

    要运行这个脚本,在命令行中输入以下命令,然后按回车键:

    python pandas_select_contiguous_rows.py supplier_data_unnecessary_header_\
    footer.csv output_files\pandas_output.csv
    

    你可以打开输出文件 pandas_output.csv 查看一下结果。

    展开全文
  • What is a .csv file? CSV stands for Comma Separated Values. A CSV file is a plain text file that stores tables and spreadsheet information. The contents are often a table of text, numbers, or dates. C...
  • VC++读写CSV文件的例子

    热门讨论 2013-09-05 11:51:57
    一个很好用的CSV文件读写的类,CSV文件用于程序的配置文件很方便
  • Python处理CSV文件(三)

    千次阅读 2021-02-27 23:44:18
    添加标题行 有些时候,电子表格中没有标题行,但你确实希望所有列都有列标题。在这种情况下,可以使用脚本添加列标题。...图 2-11:包含数据行的 CSV 文件,没有标题行 基础Python 要使用基础 Python 添加列
  • 在python中读取和写入CSV文件(你真的会吗?)

    千次阅读 多人点赞 2022-04-24 15:03:20
    csv文件的读取
  • csv文件用什么打开A Comma Separated Values (CSV) file is a plain text file that contains a list of data. These files are often used for exchanging data between different applications. For example, ...
  • python读取csv文件

    千次阅读 2021-02-15 10:15:25
    读取csv文件,用的是csv.reader()这个方法。返回结果是一个_csv.reader的对象,我们可以对这个对象进行遍历,输出每一行,某一行,或某一列。代码如下: import csv with open('CK.csv', 'r') as f: reader = csv....
  • python读取和保存csv文件

    千次阅读 2021-11-16 14:58:54
    考虑到很多人手头可能没有适合学习操作的csv文件,所以对csv模块的学习从writer开始。 writer >>> import csv >>> data = [[i*j for j in range(5)] for i in range(5)] >>> f = open('...
  • pandas处理csv文件和生成csv文件

    千次阅读 2021-12-01 14:38:05
    导入csv文件,自己输入指定路径 import pandas as pd data = pd.read_csv('E/:test.csv') print(data) ```name age birth 0 zhu 20 2000.1.5 1 wang 20 2000.6.18 2 zhang 21 1999.11.11 3 zhu
  • csv文件打开、csv文件保存和csv文件删除行信息操作。 首先展示 pckh_train.csv 文件: 接着摆出代码, 即csv文件打开、csv文件保存和csv文件删除行信息操作: import csv # 如果 pckh_train=>re...
  • 【python基础教程】csv文件的写入与读取

    千次阅读 多人点赞 2022-03-12 19:42:21
    CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符。...python自带了csv模块,专门用于处理csv文件的读取
  • python-csv文件操作

    千次阅读 2020-09-25 16:10:12
    python中使用csv文件保存数据比较常见,之前一直使用自带的csv,今天又找了找资料,看见了两个。 因为csv可以和.xls、xlsx转换,这里也提一下,对于.xls,.xlsx文件,也可以使用xlwt(新建写入)、xlrd(只读)、...
  • Python数据分析之csv文件

    千次阅读 2022-04-22 10:21:55
    Python数据分析之csv文件
  • 十分钟学会如何用Python处理CSV文件

    千次阅读 2021-08-16 13:46:57
    十分钟学会如何用Python处理CSV文件 在前几年,如果你和嵌入式开发人员推荐Python,大概会是这样一种场景: A:”诶,老王,你看Python开发这么方便,以后会不会用到嵌入式设备?“ B:“别做梦了,那玩意儿速度贼慢...
  • Vc++读写csv文件的类

    热门讨论 2013-04-21 10:45:56
    Vc++读写csv文件的类,这个资源是读写CSV文件的非常实用的类。方法写得非常好,代码也写得非常简洁,很合适在实际项目中使用
  • 最近要批量将几百个CSV文件合成一个文件,最开始是一个个复制粘贴的,进度太慢了,后面发现用一个小办法可以几秒钟将几百个CSV文件合并成一个文件,分享给大家。 第一步:将需要合并的csv文件夹全部放在D盘。 第二步...
  • java动态实现生成CSV文件

    热门讨论 2011-04-21 22:35:29
    java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件
  • 关于CSV文件的描述,以下选项中错误的是: CSV文件格式是一种通用的文件格式,应用于程序之间转移表格数据|CSV文件的每一行是一维数据,可以使用Python中的列表类型表示|CSV文件通过多种编码表示字符|整个CSV文件是一...
  • python_csv文件写入

    千次阅读 2022-01-17 15:21:40
    使用writerow方法给csv文件写入内容。 open()函数如果没有设定 newline=’’ (空字符串),表格中会隔一行写一行。 然后创建一个writer对象。writerow()方法可以写入一行,writerows()方法可以写入多行。 writerow...
  • labview创建并保存CSV文件

    热门讨论 2013-04-12 11:19:07
    labview小程序,实现自动创建并保存CSV文件,内容包括:自动创建存储路径、文件名(文件编号可自动+1)、写入数据到CSV文件,其中有头信息,有大概20000个数值输入
  • Python读取温度数据CSV文件,对数据进行检查,并进行数据可视化绘图
  • Python如何读取csv文件

    千次阅读 2021-03-17 18:03:25
    逗号分隔值(Comma-Separated Values,CSV,有时...(推荐学习:Python视频教程)CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表...
  • 【小技巧】Matlab读取CSV文件

    千次阅读 2021-03-02 20:56:35
    第二种:M = CSVREAD(‘FILENAME’,R,C) ,读取csv文件中从第R-1行,第C-1列的数据开始的数据,这对带有头文件说明的csv文件(如示波器等采集的文件)的读取是很重要的。 第三种:M = CSVREAD(‘FILENAME’,R,C,RNG),...
  • Java读写csv文件操作

    万次阅读 2021-07-01 22:43:30
    将csv(至少三个字段)里面的数据进行读的操作,将数据读取到pojo类组成的List中,然后按照某种要求进行排序,最后将排序后的结构写入另一个csv文件当中。 具体代码: csv文件: 需要依赖: Pojo类 package ...
  • Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型。在数据库或电子表格中,它是最...一、数据源首先,我们来看看本次操作的数据源,图1 CSV文件是在Excel中打开的,图2 CSV文件是在Notepad++中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 273,179
精华内容 109,271
关键字:

csv文件

友情链接: cyalicguard.rar