标题:批量将TXT文件转换成CSV文件的问题
只看楼主
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
结帖率:100%
已结贴  问题点数:20 回复次数:25 
批量将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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:25
帖 子:82
专家分:525
注 册:2023-1-12
得分:0 
我理解就是把TXT文件的空格替换为逗号、只要前两列、跳过特殊行,文件转换部分可以单独定义一个子程序:
程序代码:
def txt2csv_file(txtname,csvname):
    txtf = open(txtname,'r')
    csvf = open(csvname,'w')
    while True:
        line = txtf.readline()
        if len(line)==0:
            break
        line = line.strip()
        if line == '@Phi=0.0':
            continue
        arr = line.split()
        if len(arr) > 1:
            csvf.write(arr[0] + ',' + arr[1] + '\n')
    txtf.close()
    csvf.close()


那么现在的子程序txt_data_to_csv可以简化为:
程序代码:
def txt_data_to_csv(path,save_dir):
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    files= os.listdir(path)
    for file in files:
        file_path = os.path.join(path,file)
        save_path = os.path.join(save_dir,''+'from'+'_'+file+'.csv')
        print(file_path,save_path)
        txt2csv_file(file_path,save_path)
2023-03-22 16:11
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:0 
代码中最后一行函数调用被注释掉了,需要将注释去掉才能运行函数将txt文件转换为csv文件并保存在指定的文件夹中。此外,代码中也没有出现任何关于输出“!debugfile('D:/spyderlianxi/data_from_test_txt/txt csv1.py', wdir='D:/spyderlianxi/data_from_test_txt')”这段信息的代码,因此需要进一步检查是否存在其他脚本或工具对代码的运行产生了影响。

会当凌绝顶,一览众山小.
2023-03-22 19:03
哈一耶
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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 5楼 哈一耶
搞不清还要那么复杂吗

程序代码:
import re

with open("temp.txt",'r',encoding="gb2312") as f:   
    lines=f.readlines()    
    b=[]      
    for line in lines:           
        line = line.strip()      
        xy=re.sub(" +",",",line) +"\n"  
        b.append(xy) 
    
    with open("temp2.csv", "w", encoding="utf-8" ,newline='') as f2:
        f2.writelines(b)



DO IT YOURSELF !
2023-03-23 13:00
哈一耶
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2023-3-22
得分:0 
回复 6楼 wp231957
运行了一下,只能转一个文件,不能批量转换;转换的文件没有分列,全部都在一列里。
2023-03-23 14:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 7楼 哈一耶
方便的话  把你的txt  以及最终结果  想要什么样的csv  都发出来  (我印象中 csv  不就是逗号分割吗 )

另:  只有单个文件转成功了,才能做批量转   不过就是套了一层路径而已   都是小事了

DO IT YOURSELF !
2023-03-23 15:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 7楼 哈一耶
其实,我觉得带空格分割的原始文件  比较容易处理一些,根本就不需要转来转去的  

DO IT YOURSELF !
2023-03-23 15:14
哈一耶
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



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




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

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