标题:批量将TXT文件转换成CSV文件的问题
取消只看楼主
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
结帖率:100%
已结贴  问题点数:20 回复次数:13 
批量将TXT文件转换成CSV文件的问题
在网上下了一个TXT转CSV的脚本,运行以后显示“!debugfile('D:/spyderlianxi/data_from_test_txt/txt csv1.py', wdir='D:/spyderlianxi/data_from_test_txt')”,没有在相应文件夹输出CSV文件,
在百度上搜了两天,也没发现什么地方出了问题,请高手赐教,谢谢。
下面是代码
import os
import csv

def txt_data_to_csv(path,save_dir):
   
    """
    该函数实现将txt文件中的数据存储在csv文件中
    思路:
    1.按行读取txt文件
    2.去除每行数据两边的空格
    3.使用split()去除字符串中的空格,形成列表
    4.将列表元素提取存储在新列表
    5.将新列表数据写入csv文件中
    """
    files= os.listdir(path)         #遍历文件夹中的所有文件,将文件名存储在列表中
    for file in files:              #遍历文件夹中的txt文件
        file_path = os.path.join(path,file)
        if not os.path.exists(save_dir):
            os.makedirs(save_dir)
        save_path=os.path.join(save_dir,'数据提取'+'from'+'_'+file+'.csv')
        if os.path.exists(save_path):
            os.remove(save_path)         #如果已经存在该文件夹,移除
        x_list=[]                        #新建空列表用于存储数据
        y_list=[]
        with open(file_path,'r') as f:   #打开txt文件
            lines=f.readlines()          #按行读取文件,并按行存储为列表
            for line in lines:           #遍历存储了文件信息的列表
                line = line.strip()      #去掉每个元素中的前后空格
                #print(line)
                if line!='@Phi=0.0':
                    xy=line.split()      #将txt文件中每行的空格去掉
                    x_list.append(xy[0]) #提取txt文件每行的第一个元素
                    y_list.append(xy[1]) #提取txt文件每行的第二个元素
            rows = zip(x_list,y_list)    #将列表按列存储
            with open(save_path, "w", newline='') as f:
                writer = csv.writer(f)
                for row in rows:
                    writer.writerow(row)

path=r'D:\spyderlianxi\data_from_test_txt'        #txt文件所在文件夹路径
save_dir=r'D:\spyderlianxi\data_from_test_txt'    #csv文件存储所在文件夹
#txt_data_to_csv(path,save_dir)
搜索更多相关主题的帖子: path CSV 存储 TXT 文件 
2023-03-22 14:55
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
简化以后最后一行是错误的;即提示“txt2csv_file(file_path,save_path)”

还有,“#txt_data_to_csv(path,save_dir)”将最后一行注释去掉,保存为CSV文件时,软件得出以下错误信息:
!debugfile('D:/spyderlianxi/data_from_test_txt/txt csv1.py', wdir='D:/spyderlianxi/data_from_test_txt')
Traceback (most recent call last):

  File "d:\spyderlianxi\data_from_test_txt\txt csv1.py", line 51, in <module>
    txt_data_to_csv(path,save_dir)

  File "d:\spyderlianxi\data_from_test_txt\txt csv1.py", line 41, in txt_data_to_csv
    y_list.append(xy[1]) #提取txt文件每行的第二个元素

IndexError: list index out of range
2023-03-23 09:26
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
重新写了一下

import os
import csv

def txt_data_to_csv(path,save_dir):
     files= os.listdir(path)              #遍历文件夹中的所有文件,将文件名存储在列表中
     for file in files:                   #遍历文件夹中的txt文件
        file_path = os.path.join(path,file)
        save_path=os.path.join(save_dir,file+'.csv')
        x_list=[]                        #新建空列表用于存储数据
        with open(file_path,'r') as f:   #打开txt文件
              for line in f:               #遍历存储了文件信息的列表
                line=line.split()
                with open(save_path, "w") as f:
                   writer = csv.writer(f)   
                   writer.writerow(x_list)
            
path=r'D:\spyderlianxi\data_from_test_txt'        #txt文件所在文件夹路径
save_dir=r'D:\spyderlianxi\data_from_test_txt'    #csv文件存储所在文件夹
txt_data_to_csv(path,save_dir)  
输出的是空表,哪里错了呢?
2023-03-23 11:17
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
回复 6楼 wp231957
运行了一下,只能转一个文件,不能批量转换;转换的文件没有分列,全部都在一列里。
2023-03-23 14:54
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
110043 无锡转债 日线 前复权
      日期        开盘        最高        最低        收盘        成交量        成交额
2018/03/14    99.880    99.880    97.400    97.430    843286    827886016.00
2018/03/15    97.510    97.550    96.710    96.890    274942    266733264.00
2018/03/16    96.930    97.140    96.930    96.990    113902    110530520.00
2018/03/19    96.950    96.980    96.590    96.800    112843    109147776.00
2018/03/20    96.620    96.700    96.420    96.530    109005    105255264.00
-----------------------------------------------------------------
   日期        开盘     最高     最低     收盘    成交量      成交额
2018/03/14    99.880    99.880    97.400    97.430    843286    827886016.00
2018/03/15    97.510    97.550    96.710    96.890    274942    266733264.00
2018/03/16    96.930    97.140    96.930    96.990    113902    110530520.00
2018/03/19    96.950    96.980    96.590    96.800    112843    109147776.00
2018/03/20    96.620    96.700    96.420    96.530    109005    105255264.00


上面是TXT文件,有很多个;下面是CSV格式,我是想在文件夹里生成与TXT同文件名的CSV文件,谢谢。
2023-03-23 15:29
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
import csv
csvFile = open("./data.csv",'w',newline='')
writer = csv.writer(csvFile)
csvRow = []

f = open("data.txt",'r')
for line in f:
    csvRow = line.split()
    writer.writerow(csvRow)
   
f.close()
csvFile.close()

运行这个可以生成CSV,但是不能批量生成,只是1个。
2023-03-23 15:34
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 

这个是转出后的图片 .csv文件
2023-03-23 15:44
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 

这个是txt文件
2023-03-23 15:46
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
生成的文件如何去掉第一行,只从表头开始。就是去掉“110043    无锡转债    日线    前复权”这一行。
2023-03-23 15:48
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
我是想要批量将TXT文件转成同文件名CVS文件,方便调用计算,同时希望去掉第一行。
2023-03-23 15:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511635-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.275918 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved