Python 批量读取 TXT 并转换为 CSV 的方法
本文介绍如何使用 Python 批量读取指定目录下的 TXT 文件,并通过 linecache 模块提取特定行数据,经过字符串处理后转换为 CSV 格式。文章提供了完整的代码示例,涵盖文件遍历、行读取、数据清洗及文件写入等关键步骤。
实现思路与核心模块
该任务的核心在于批量处理文件以及高效读取特定行数据。Python 的 os 模块用于处理文件路径和目录列表,而 linecache 模块则被用于缓存并读取文件中的特定行,这在处理大文件或需要随机访问特定行时较为常用。
完整代码实现
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 29 15:49:06 2016
@author: user
"""
import os
#从文件中读取某一行 linecache.checkcache可以刷新cache ,linecache可以缓存某一行的信息
import linecache
def GetFileNameAndExt(filename):
(filepath,tempfilename) = os.path.split(filename);
(shotname,extension) = os.path.splitext(tempfilename);
return shotname
fileList=[]
fileOutList=[]
for filename in os.listdir(r'D:\input'):
pa='D:\input\%s'%filename
fileList.append(pa)
name=GetFileNameAndExt(pa)
name+='.csv'
pa='D:\output\%s'%name
fileOutList.append(pa)
for files in range(0,len(fileList)):
lineCount = len(open(fileList[files],'rU').readlines())
print '====this file %s : %d lines'%(fileList[files],lineCount)
print '====有效数据行数 %d lines'%( lineCount-14)
global cnt
global mainContent
global s1
s1=''
mainContent=''
cnt=0
for var in range(14,lineCount+1):
theline = linecache.getline(fileList[files], var)
s= theline[15:13+104]
s = s.replace(' ',',') # 将字符串里的k全部替换为8
s = s.replace(' ',',') # 将字符串里的k全部替换为8
if var%2 == 0:
s+=(',')
s1= s
else:
string =s1.strip('\n') + s+'\n'
mainContent +=string
cnt+=1
print '====out line count =%d'%cnt
# print s
print '===final data====='
# print mainContent
# 打开一个文件
fo = open(fileOutList[files], "wb")
fo.write( mainContent);
# 关闭打开的文件
fo.close()
代码逻辑解析
脚本首先定义了 GetFileNameAndExt 函数,用于从完整路径中提取文件名并去除扩展名。随后,通过 os.listdir 遍历 D:\input 目录下的所有文件,构建源文件列表 fileList 和目标 CSV 文件列表 fileOutList。
在处理每个文件时,程序首先计算总行数,并打印有效数据行数(总行数减去前 14 行)。接着,通过 linecache.getline 读取从第 15 行开始的每一行数据。代码对读取的字符串进行了切片处理(theline[15:13+104]),并将空格替换为逗号。逻辑中通过判断行号的奇偶性来拼接字符串,最终将处理后的内容写入目标 CSV 文件。
注意事项
该脚本使用了全局变量来存储中间状态,这在处理大量文件时可能会影响内存效率。此外,文件路径硬编码为 D:\input 和 D:\output,实际使用时需根据环境修改。代码中的注释提到替换字符串,但实际逻辑是替换空格为逗号,建议根据实际需求调整字符串处理部分。
以上就是 python 循环读取 txt 文档 并转换成 csv 的详细内容,更多关于 python txt转csv 的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













