1370607278 发表于 2022-4-25 10:57:15

python输出 文件问题

import pandas as pd
import os
import csv
from scipy.signal import find_peaks
import numpy as np
# 全局变量,文件读取路径
read_path = r"C:\Users\Administrator\Desktop\text2"
# 全局变量,处理结果文件输出路径
output_path = r"C:\Users\Administrator\Desktop\text2"
# 获取文件路径
def get_file_path():
    read_path = r'C:\Users\Administrator\Desktop\text'    #读取文件路径
    output_path = r'C:\Users\Administrator\Desktop\text1'      #写入结果文件路径
    return read_path,output_path

# 读取文件名称和内容
def deal_files():
    # 获取read_path下的所有文件名称(顺序读取的)
    files = os.listdir(read_path)
    if not os.path.exists(output_path):
      os.mkdir(output_path)
    for file_name in files:
      # 读取单个文件内容
      dfdata = pd.read_csv(read_path+"\\"+file_name)
      #处理单个文件(调用方法)
      finish_dfdata = get_deal_file(dfdata)
      # 输出结果到指定路径下
      # finish_dfdata.to_csv(output_path + "\\" + "处理结果_" + file_name,index=False)
    print("文件处理完毕")

# 处理单个文件程序 /针对不同批量处理文件进行修改对文件的处理代码,返回值:finish_dfdata/
def get_deal_file(dfdata):#以后批量处理任何类型数据只需要改这个函数
    col_1 = dfdata["count"]   #获取所有Y值
    data_1 = np.array(col_1)#把所有Y值建立成一个一维数组
    y_mat = list() #建立空列表
    #循环 给空列表赋值
    for i in range(256):#256是除去所有行,本来想动态,但是一直报错,看到所有文件都是256行,就直接写了数字
       y_mat.append(data_1)   #把值全赋给这个列表
    peaks, _ = find_peaks(y_mat, distance=40) #36行-39行不知道是不是多余,你可以试试把y_mat直接换成data_1数组。 这一行是获取峰值,返回x坐标
    # peaks2, _ = find_peaks(y_mat, prominence=100)      # BEST!
    # peaks4, _ = find_peaks(y_mat, threshold=0.4)   # Required vertical distance to its direct neighbouring samples, pretty useless
    print(peaks)#上面三个都是提取峰值的功能,参数是来调取,减小震荡,你看看哪个更符合你的需求
    return peaks


# 主函数
if __name__=="__main__":
    # 获取文件输入和输出路径
    read_path,output_path = get_file_path()
    # 开始处理文件,并输出处理文件结果
    deal_files()





大佬们这个代码我输出成功了,但是输出结果建了一个空的文件夹text1 是什么情况呀 我想把结果保存到excel或者txt里,谢谢大佬

白two 发表于 2022-4-25 12:27:15

粗略看了一下,没看到你写入的逻辑啊
没有 open,也没有with open

Twilight6 发表于 2022-4-25 14:12:06



你把第二十八行,也是唯一的一行输出数据到文件的代码 to_csv 注释了,代码怎么可能会有输出,把注释打开再试试看:

import pandas as pd
import os
import csv
from scipy.signal import find_peaks
import numpy as np
# 全局变量,文件读取路径
read_path = r"C:\Users\Administrator\Desktop\text2"
# 全局变量,处理结果文件输出路径
output_path = r"C:\Users\Administrator\Desktop\text2"
# 获取文件路径
def get_file_path():
    read_path = r'C:\Users\Administrator\Desktop\text'    #读取文件路径
    output_path = r'C:\Users\Administrator\Desktop\text1'      #写入结果文件路径
    return read_path,output_path

# 读取文件名称和内容
def deal_files():
    # 获取read_path下的所有文件名称(顺序读取的)
    files = os.listdir(read_path)
    if not os.path.exists(output_path):
      os.mkdir(output_path)
    for file_name in files:
      # 读取单个文件内容
      dfdata = pd.read_csv(read_path+"\"+file_name)
      #处理单个文件(调用方法)
      finish_dfdata = get_deal_file(dfdata)
      # 输出结果到指定路径下
      finish_dfdata.to_csv(output_path + "\" + "处理结果_" + file_name,index=False)
    print("文件处理完毕")

# 处理单个文件程序 /针对不同批量处理文件进行修改对文件的处理代码,返回值:finish_dfdata/
def get_deal_file(dfdata):#以后批量处理任何类型数据只需要改这个函数
    col_1 = dfdata["count"]   #获取所有Y值
    data_1 = np.array(col_1)#把所有Y值建立成一个一维数组
    y_mat = list() #建立空列表
    #循环 给空列表赋值
    for i in range(256):#256是除去所有行,本来想动态,但是一直报错,看到所有文件都是256行,就直接写了数字
       y_mat.append(data_1)   #把值全赋给这个列表
    peaks, _ = find_peaks(y_mat, distance=40) #36行-39行不知道是不是多余,你可以试试把y_mat直接换成data_1数组。 这一行是获取峰值,返回x坐标
    # peaks2, _ = find_peaks(y_mat, prominence=100)      # BEST!
    # peaks4, _ = find_peaks(y_mat, threshold=0.4)   # Required vertical distance to its direct neighbouring samples, pretty useless
    print(peaks)#上面三个都是提取峰值的功能,参数是来调取,减小震荡,你看看哪个更符合你的需求
    return peaks


# 主函数
if __name__=="__main__":
    # 获取文件输入和输出路径
    read_path,output_path = get_file_path()
    # 开始处理文件,并输出处理文件结果
    deal_files()


页: [1]
查看完整版本: python输出 文件问题