将txt文件转换为csv文件的几种方法(Python实现)

文件的两种操作方式

①使用open()方法

Python open()方法用于打开一个文件,并返回文件对象。 在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出OSError。
注意:使用open()方法一定要保证关闭文件对象,即调用close()方法。
open()函数常用形式是接收两个参数:文件名(file)和模式(mode)。

②使用with语句

使用with语句打开文件有几个重要的好处:
自动关闭文件: with语句创建了一个上下文管理器,确保在代码块执行结束时自动关闭文件。这样可以避免忘记手动关闭文件的错误,同时确保及时释放资源。
异常处理: with语句在文件操作中提供了异常处理的机制。如果在文件操作过程中发生异常,with语句会确保文件被正确关闭,防止文件资源泄漏。
简化代码结构: 使用with语句可以简化代码结构,避免显式地调用close方法。这使得代码更加清晰和易读。

将txt文件转换为csv文件的几种方法(Python实现)_第1张图片

Python内置的csv模块

Python内置了一个csv模块,该模块提供了用于读取和写入CSV文件的功能。CSV(Comma-Separated Values)是一种简单的文本格式,其中数据字段由逗号或其他分隔符分隔。

以下是csv模块的一些主要功能:

  • csv.reader: 用于读取CSV文件。可以指定不同的分隔符,如逗号、制表符等。
  • 语法:csv.reader(csvfile, delimiter=',', dialect='excel', **fmtparams)
    csvfile: 一个打开的文件对象或者支持迭代的对象(例如,文件的每一行作为一个字符串元素的列表)。
    delimiter: 可选参数,用于指定 CSV 文件中字段之间的分隔符。默认为逗号 ,。
    dialect: 可选参数,用于指定 CSV 文件的方言(例如,CSV 文件使用的分隔符等)。如果未指定,默认为 ‘excel’。
    fmtparams: 可选的关键字参数,用于覆盖方言的一些参数设置。
import csv

with open('data.txt', 'r') as file:
    csv_reader = csv.reader(file)
    for row in csv_reader: #读取一行数据,以逗号进行分隔
        print(row) #返回一个列表

将txt文件转换为csv文件的几种方法(Python实现)_第2张图片

  • csv.writer: 用于写入CSV文件。同样,可以指定分隔符。
import csv

data = [['Name', 'Age', 'City'],
        ['John', 25, 'New York'],
        ['Alice', 30, 'San Francisco'],
        ['Bob', 22, 'Los Angeles']]

with open('example.csv', 'w', newline='') as file:
    csv_writer = csv.writer(file)
    csv_writer.writerows(data)
  • csv.DictReader和csv.DictWriter: 这两个类用于读取和写入字典形式的数据,其中字典的键通常是CSV文件中的列标题。
  • 语法:csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
  • csvfile: 一个打开的文件对象或者支持写入的对象。
    fieldnames: 一个包含字典键的列表,指定 CSV 文件的列顺序和列标题。
    restval: 可选参数,用于指定字典中缺少的键对应的默认值。默认为空字符串 ‘’。
    extrasaction: 可选参数,指定在写入字典时,是否忽略额外的键(‘ignore’),将其视为错误(‘raise’)或将其添加到输出中(‘write’)。
    dialect: 可选参数,用于指定 CSV 文件的方言(例如,CSV 文件使用的分隔符等)。如果未指定,默认为 ‘excel’。
    *args 和 **kwds: 其他可选的位置参数和关键字参数,用于配置方言的其他参数。
import csv

with open('example.csv', 'r') as file:
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        print(row)

data = [{'Name': 'John', 'Age': 25, 'City': 'New York'},
        {'Name': 'Alice', 'Age': 30, 'City': 'San Francisco'},
        {'Name': 'Bob', 'Age': 22, 'City': 'Los Angeles'}]

with open('example.csv', 'w', newline='') as file:
    fieldnames = ['Name', 'Age', 'City']
    csv_writer = csv.DictWriter(file, fieldnames=fieldnames)
    csv_writer.writeheader() #写入标题行
    csv_writer.writerows(data) #写入字典数据

假设有一个文本文件data.txt内容如下:

Name, Age, City
John, 25, New York
Alice, 30, San Francisco
Bob, 28, Los Angeles

方法一:使用标准的文件读写操作

# 读取文本文件内容 输出到CSV文件
with open('data.txt', 'r') as fi, open('data.csv', 'w', newline='') as fo:
    # 逐行读取txt文件
    for line in fi:
        # 假设txt文件中的字段是由逗号和空格分隔的
        fields = line.strip().split(', ')
        # 将字段以逗号分隔写入csv文件
        fo.write(','.join(fields) + '\n')

总结:
newline=''参数的作用:
在使用open函数打开文件时,newline='‘参数是为了确保在不同操作系统上正确处理换行符。
在Windows系统上,文本文件的行尾通常由两个字符组成:回车符(\r)和换行符(\n),即"\r\n"。而在类Unix 系统(如Linux和macOS)上,行尾只使用换行符(\n),即"\n"。
在Python中,open函数默认使用操作系统的默认行尾符号。然而,CSV格式通常期望行尾符是\n,而不是\r\n。如果不使用newline=’‘参数,可能会导致在某些情况下生成的CSV文件在不同平台上的行尾符不一致,可能会引起问题。
因此,使用newline=’'参数可以确保在写入CSV文件时,Python会统一使用\n作为行尾符,从而避免潜在的问题。这样做是为了提高跨平台兼容性。

方法二:使用内置的csv模块

import csv
 
with open('data.txt', 'r') as fi, open('data.csv', 'w', newline='') as fo:

    # 使用CSV读取器逐行读取txt文件
    csv_reader = csv.reader(fi)
 
     # 创建CSV写入器
    csv_writer = csv.writer(fo)
    
    # 将每一行的内容写入CSV文件
    for row in csv_reader:
        csv_writer.writerow(row) #writerow()方法是csv.writer对象的一个方法,用于将一行数据写入文件。

方法三:使用pandas库

import pandas as pd
 
# 使用pandas读取txt文件
df = pd.read_csv('data.txt', delimiter=', ')
 
# 将数据写入csv文件
df.to_csv('data.csv', index=False)

你可能感兴趣的:(计算机等级考试,python)