📜  如何在Python读取 CSV 文件中的数字?

📅  最后修改于: 2022-05-13 01:54:29.166000             🧑  作者: Mango

如何在Python读取 CSV 文件中的数字?

先决条件:读取和写入 CSV 数据创建 CSV 文件 

CSV 是逗号分隔值文件,它允许以表格格式保存纯文本数据。这些文件以 .csv 扩展名存储在我们的系统中。 CSV 文件不同于其他电子表格文件类型(如 Microsoft Excel),因为我们在一个文件中只能有一个工作表,并且它们不能保存单元格、列或行。此外,我们无法以这种格式保存公式。

为了在Python解析 CSV 文件,我们使用了csv 库。 CSV 库包含用于从 CSV 文件读取、写入和处理数据的对象。让我们看看如何使用 csv 库将数字添加到我们的 CSV 文件中。

读取 CSV 文件中的数字的步骤:

  1. 创建一个Python文件(例如:gfg.py)。
  2. 导入 csv 库。
  3. 创建一个嵌套列表“标记”,以表格格式存储学生卷号及其在数学和Python中的分数。
  4. 在 writer 对象和其他必要参数的“w”模式下打开一个新的 csv 文件(或现有的 csv 文件)(此处为 delimeter & quoting)。
  5. 借助 writerows 方法将列表“标记”写入其中。
  6. 为了读取行,请使用 reader 对象并将每一行(这也是一个列表)存储在新列表“输出”中。
  7. 打印列表输出以验证代码。

读取不带引号的 CSV 文件中的数字:

为了写入我们的 CSV 文件“my_csv”,我们使用了 writer 对象的 writerows() 方法。但是要按原样读取数字,我们将使用 writer 对象的一个可选参数,即'quoting' 。 'quoting' 参数告诉作者要引用哪个字符。

如果引用设置为csv.QUOTE_NONNUMERIC ,则 .writerow() 将引用包含文本数据的所有字段并将所有数字字段转换为浮点数据类型。



代码:

Python3
import csv
  
# creating a nested list of roll numbers,
# subjects and marks scored by each roll number
marks = [
    ["RollNo", "Maths", "Python"],
    [1000, 80, 85],
    [2000, 85, 89],
    [3000, 82, 90],
    [4000, 83, 98],
    [5000, 82, 90]
]
  
# using the open method with 'w' mode
# for creating a new csv file 'my_csv' with .csv extension
with open('my_csv.csv', 'w', newline = '') as file:
    writer = csv.writer(file, quoting = csv.QUOTE_NONNUMERIC,
                        delimiter = ' ')
    writer.writerows(marks)
  
# opening the 'my_csv' file to read its contents
with open('my_csv.csv', newline = '') as file:
    
    reader = csv.reader(file, quoting = csv.QUOTE_NONNUMERIC,
                        delimiter = ' ')
      
    # storing all the rows in an output list
    output = []
    for row in reader:
        output.append(row[:])
  
for rows in output:
    print(rows)


Python3
import csv
  
# creating a nested list of roll numbers,
# subjects and marks scored by each roll number
marks = [
    ["RollNo", "Maths", "Python"],
    [1000, 80, 85],
    [2000, 85, 89],
    [3000, 82, 90],
    [4000, 83, 98],
    [5000, 82, 90]
]
  
# using the open method with 'w' mode
# for creating a new csv file 'my_csv' with .csv extension
with open('my_csv.csv', 'w', newline = '') as file:
    writer = csv.writer(file, quoting = csv.QUOTE_ALL,
                        delimiter = ' ')
    writer.writerows(marks)
  
# opening the 'my_csv' file to read its contents
with open('my_csv.csv', newline = '') as file:
    reader = csv.reader(file, 
                        quoting = csv.QUOTE_ALL,
                        delimiter = ' ')
      
    # storing all the rows in an output list
    output = []
    for row in reader:
        output.append(row[:])
  
for rows in output:
    print(rows)


输出:

gfg.py 的输出

这是它在 CSV 文件“my_csv.csv”中的外观,该文件在我们运行上述代码后创建:

我的_csv.csv

用引号读取 CSV 文件中的数字:

如果引用设置为 csv.QUOTE_ALL 然后 .writerow() 将引用所有字段,并且数字现在将存储在引号中。为了读取每一行的数字,我们使用来自 CSV 库的 reader 对象并将所有行存储在列表“输出”中,我们也将在之后打印。

代码:

蟒蛇3

import csv
  
# creating a nested list of roll numbers,
# subjects and marks scored by each roll number
marks = [
    ["RollNo", "Maths", "Python"],
    [1000, 80, 85],
    [2000, 85, 89],
    [3000, 82, 90],
    [4000, 83, 98],
    [5000, 82, 90]
]
  
# using the open method with 'w' mode
# for creating a new csv file 'my_csv' with .csv extension
with open('my_csv.csv', 'w', newline = '') as file:
    writer = csv.writer(file, quoting = csv.QUOTE_ALL,
                        delimiter = ' ')
    writer.writerows(marks)
  
# opening the 'my_csv' file to read its contents
with open('my_csv.csv', newline = '') as file:
    reader = csv.reader(file, 
                        quoting = csv.QUOTE_ALL,
                        delimiter = ' ')
      
    # storing all the rows in an output list
    output = []
    for row in reader:
        output.append(row[:])
  
for rows in output:
    print(rows)

输出:

gfg.py 的输出

这就是上述输入如何存储在“my_csv.csv”文件中的:

我的_csv.csv