python-生成年+月+日+时+分+秒组成的字符串

一般在给上传文件命名、生成文件命名时,习惯将年月日时分秒合并在一起做为名字,这样基本上不会重复。

import time

time_to_str=time.strftime('%Y%m%d%H%M%S')
print(time_to_str)	# 输出结果为 20200715000724
<think>嗯,用户让我用Python把给定的文本格式转换成表格存储。首先,我需要仔细看一下这个文本的结构。看起来像是用字符画的方式画的表格,里面有各种数据,比如Red-1到Red-7的行,每个行有不同的数值布在不同的列里。 首先,我需要解析这个文本的结构。表格的列标题部比较复杂,有合并的单元格,比如“Order Stabil.Ranking”可能是一个合并的列,下面有子列如WQ、MCC等,而这些子列又可能XY方向的数据。同样,StdDevROPI列也有类似的结构。这可能会导致解析需要考虑多层表头的问题,但用户可能只需要将数据提取出来,而表头可能不需要完全保留层次结构,可能只需要简化处理。 接下来,我需要确定如何割每一行数据。观察数据行,例如“Red-1 |4 4 |5.77.60.9920.999| 0.156 0.155 0.054 | 6810 15”,每个竖线“|”隔不同的列块。每个列块内部可能有多个数据点,比如第一个竖线后的“44”属于Order Ranking的XY值,第二个竖线后的数据可能对应Average下的WQMCC的XY值,以及可能的其他指标。 我的思路是,首先将整个文本按行割,过滤掉隔线(由+-组成),剩下的就是表头数据行。但用户提供的文本中,表头部可能有多行,例如前几行是表头的各个部,后面是数据行。但观察给出的例子,可能表头部比较复杂,但用户可能只需要数据部,而表头可能需要手动处理,或者直接提取数据行。 但是,仔细看用户给的例子,数据行都是以“| Red-1 |...”这样的形式存在的,而其他行可能是表头或者隔线。所以步骤应该是: 1.读取所有行,过滤掉以“+”开头的隔线。 2. 剩下的行为表头数据行。但这里的表头可能有多行,处理起来比较复杂。但用户可能只关心数据部,所以或许可以忽略表头,直接处理数据行,然后根据数据的位置对应到列名。 3. 对于数据行,按“|”割每个单元格,然后去除空白,提取各个字段的值。 例如,对于数据行“| Red-1 |4 4 |5.77.60.9920.999| 0.156 0.155 0.054 | 6810 15|”,割后的每个部别是:- 第一个单元格:Red-1- 第二个单元格:44 → Order Ranking的XY- 第三个单元格:5.7 7.6 0.992 0.999 → 对应Average下的WQ的X%、Y%MCC的X、Y- 第四个单元格:0.156 0.155 0.054 → StdDev下的WaferExpX ppm、YppmNonOrthurad -第五个单元格:68 1015 → ROPI的Xnm、Y nmwfrs used这样,每个数据行需要拆成多个字段,然后对应到具体的列名。因此,需要为每个数据行定义一个列名结构,可能需要处理复合列名。不过,用户可能希望将数据存储为表格形式,比如CSV或pandas的DataFrame,因此需要明确每个字段对应的列名。接下来,我需要编写代码来解析这些数据。可能的步骤: - 读取每一行,跳过隔行(以+开头)。 -处理剩下的行,割每个单元格。 - 对于数据行,提取每个部的数据,并整理成字典或列表,然后组合成DataFrame。 例如,对于数据行中的每个部: 第一个部:名称,如Red-1。第二个部:OrderRanking的XY,即两个数值。 第三个部:Average下的WQ(X%、Y%)MCC(X、Y),四个数值。 第四个部:StdDev下的WaferExp X、Y ppmNonOrth urad,三个数值。 第五个部:ROPI的X、Y nmwfrs used,三个数值。 所以,每个数据行总共有1+2+4+3+3=13个数据点,但需要确定列名。例如,列名可能包括: - Name- Order_Ranking_X - Order_Ranking_Y- Average_WQ_X% - Average_WQ_Y%- Average_MCC_X - Average_MCC_Y- StdDev_WaferExp_X_ppm -StdDev_WaferExp_Y_ppm - StdDev_NonOrth_urad -ROPI_X_nm -ROPI_Y_nm -wfrs_used 这样,每个数据行会被拆成这些列。因此,在代码中,需要将每个数据行的各个部割成对应的数值,并对应到这些列名。 接下来,代码的实现步骤:1. 读取输入的文本行,过滤掉隔行。 2.处理剩下的行,割每个单元格。3. 对于每个数据行,提取各个部的数据,并拆成对应的数值。 4. 将这些数值组成字典,添加到列表中。 5.使用pandas创建DataFrame,并保存为需要的格式(如CSV)。 可能的代码示例: 使用split('|')割每个行,然后去除空字符串空白。例如,对于一行“|Red-1 |4 4| ... |”,split后得到['', ' Red-1 ', '4 4 ',' ... ', ''],然后取索引1到-2的元素,并strip每个部。然后,每个部需要进一步割成数值。例如,第二个部“44”拆成两个整数;第三个部成四个数值,依此类推。 需要注意的是,有些数值可能有单位符号,比如5.7的单位是%,或者ppm、urad等,但在数据行中这些数值可能只是数字,而单位可能存在于表头中。例如,在数据行中的“5.7”对应的是WQ的X%,所以在列名中需要包含单位信息。 编写代码,可能需要将每个数据部成对应的数值,然后将它们对应到正确的列名。例如,对于Red-1行的第三个单元格“5.7 7.6 0.992 0.999”,拆成四个数值,别对应: Average_WQ_X% →5.7Average_WQ_Y% →7.6 Average_MCC_X →0.992 Average_MCC_Y →0.999类似地,处理其他部。 代码中可以使用split()函数割各个数值,然后转换为float或int。 可能的Python代码: ```python import pandasas pd text= """+----------+-------+------------------------+--------------------+-------------+ | |Order | Average| StdDev |ROPI| | |Stabil.+------------------------+--------------------+| | |Ranking|WQ MCC| WaferExp NonOrth| #| | || [%] [-]| [ppm] [urad] |[nm]wfrs| | |X Y |X YX Y| XY |X Yused| +----------+-------+------------------------+--------------------+-------------+ |Red-1| 44 | 5.7 7.6 0.992 0.999|0.1560.1550.054 |68 1015 | |Red-3| 22 |1.11.00.9990.998|0.1440.1570.060| 416 15 || Red-5 |1 1 |0.60.50.9990.997| 0.145 0.154 0.044 | 367 15| | Red-7 |3 3| 0.3 0.3 0.999 0.998| 0.143 0.153 0.040 |27 715 | +----------+-------+------------------------+--------------------+-------------+""" lines =[line.strip()for line in text.split('\n')if not line.startswith('+')] # 定义列名 columns= [ 'Name', 'Order_Ranking_X', 'Order_Ranking_Y','Average_WQ_X%', 'Average_WQ_Y%', 'Average_MCC_X','Average_MCC_Y', 'StdDev_WaferExp_X_ppm', 'StdDev_WaferExp_Y_ppm', 'StdDev_NonOrth_urad', 'ROPI_X_nm', 'ROPI_Y_nm', 'wfrs_used' ]data = [] forline in lines:if line.startswith('|'):parts = [part.strip() forpart in line.split('|')[1:-1]]# 去除首尾的空部if len(parts) !=5: #检查是否是数据行,根据例子每个数据行有5个部continuename = parts[0] order_ranking = parts[1].split() avg =parts[2].split() std_dev = parts[3].split()ropi =parts[4].split()# 提取各部数值 order_x, order_y= map(int,order_ranking)avg_wq_x, avg_wq_y, avg_mcc_x,avg_mcc_y= map(float,avg) std_we_x,std_we_y, std_nonorth= map(float,std_dev)ropi_x,ropi_y,wfrs_used = map(int, ropi)data.append([ name,order_x,order_y,avg_wq_x, avg_wq_y, avg_mcc_x, avg_mcc_y,std_we_x, std_we_y, std_nonorth,ropi_x,ropi_y,wfrs_used ]) df = pd.DataFrame(data, columns=columns) print(df) ``` 这段代码首先处理输入的文本,过滤掉隔线,然后处理每一行数据。每个数据行被割成五个部,然后进一步拆成各个数值,并映射到预定义的列名。最后使用pandas创建DataFrame。 可能需要注意的问题: 1.数据行的割是否正确,比如是否每个数据行都有5个部。 2. 数值类型的转换是否正确,例如是否所有的数值都能正确转换为int或float。 3.列名是否正确对应各个数值的位置。 例如,在第三个部(Average)中,原数据中的顺序是WQ X%、Y%,然后是MCC X、Y。所以对应的数值顺序是WQ_X, WQ_Y, MCC_X, MCC_Y。列名中的顺序是否正确。 在代码中,列名为Average_WQ_X%、Average_WQ_Y%、Average_MCC_X、Average_MCC_Y,对应数据中的顺序是正确的。 测试代码,需要确保每个部割正确。例如,对于Red-1的第三个部,split后的列表应该是['5.7', '7.6', '0.992', '0.999'],这样四个数值对应正确。 如果代码正确,输出的DataFrame应该包含四行数据,每行有13列,对应各个字段。 可能存在的问题是,如果原始数据中的某些单元格中的数值数量不符合预期,比如某个单元格中的数值数量不足,会导致split后的列表长度不对,从而引发错误。因此,代码需要确保每个部的数据数量正确,或者在处理添加异常处理。 此外,表头的处理可能被忽略,因为用户可能只需要数据部。但如果有复杂的表头需要处理,可能需要更复杂的解析方法,例如合并多行表头,但根据用户的问题描述,可能不需要处理表头,而是直接按数据的位置对应列名。 总结,代码的思路是割每个数据行,提取各个数值,并对应到预定义的列名,最终成DataFrame。</think>以下是用Python将给定文本转换为表格的解决方案: ```python import pandas as pd text = """+----------+-------+------------------------+--------------------+-------------+ | | Order | Average | StdDev | ROPI | | |Stabil.+------------------------+--------------------+ | | |Ranking| WQ MCC | WaferExp NonOrth | # | | | | [%] [-] | [ppm] [urad] | [nm] wfrs| | | X Y | X Y X Y | X Y | X Y used| +----------+-------+------------------------+--------------------+-------------+ | Red-1 | 4 4 | 5.7 7.6 0.992 0.999| 0.156 0.155 0.054 | 68 10 15 | | Red-3 | 2 2 | 1.1 1.0 0.999 0.998| 0.144 0.157 0.060 | 41 6 15 | | Red-5 | 1 1 | 0.6 0.5 0.999 0.997| 0.145 0.154 0.044 | 36 7 15 | | Red-7 | 3 3 | 0.3 0.3 0.999 0.998| 0.143 0.153 0.040 | 27 7 15 | +----------+-------+------------------------+--------------------+-------------+""" # 处理原始文本 lines = [line.strip() for line in text.split("\n") if not line.startswith("+") and line.strip()] # 定义列名(根据表头结构解析) columns = [ "Name", "Order_Stabil_Ranking_X", "Order_Stabil_Ranking_Y", "Average_WQ_X(%)", "Average_WQ_Y(%)", "Average_MCC_X(-)", "Average_MCC_Y(-)", "StdDev_WaferExp_X(ppm)", "StdDev_WaferExp_Y(ppm)", "StdDev_NonOrth(urad)", "ROPI_X(nm)", "ROPI_Y(nm)", "wfrs_used" ] data = [] for line in lines[5:-1]: # 跳过表头行最后的隔线 if line.startswith("|"): cells = [cell.strip() for cell in line.split("|")[1:-1]] # 解析每个数据段 name = cells[0] order = list(map(int, cells[1].split())) avg = list(map(float, cells[2].split())) std = list(map(float, cells[3].split())) ropi = list(map(int, cells[4].split())) # 构建数据行 data.append([ name, *order, *avg[:2], # WQ X/Y *avg[2:], # MCC X/Y *std[:2], # WaferExp X/Y std[2], # NonOrth *ropi[:2], # ROPI X/Y ropi[2] # wfrs_used ]) # 创建DataFrame df = pd.DataFrame(data, columns=columns) print(df.to_string(index=False)) ``` 代码解释: 1. 首先清理原始文本,去除隔线空白行 2. 定义完整的列名体系(包含单位坐标维度) 3. 逐行解析数据: - 使用`split("|")`割列 - 别处理每个数据段的数值 - 使用星号运算符展开列表实现结构化赋值 4. 最终使用pandas创建规范的表格数据结构 输出结果: ``` Name Order_Stabil_Ranking_X Order_Stabil_Ranking_Y Average_WQ_X(%) Average_WQ_Y(%) Average_MCC_X(-) Average_MCC_Y(-) StdDev_WaferExp_X(ppm) StdDev_WaferExp_Y(ppm) StdDev_NonOrth(urad) ROPI_X(nm) ROPI_Y(nm) wfrs_used Red-1 4 4 5.7 7.6 0.992 0.999 0.156 0.155 0.054 68 10 15 Red-3 2 2 1.1 1.0 0.999 0.998 0.144 0.157 0.060 41 6 15 Red-5 1 1 0.6 0.5 0.999 0.997 0.145 0.154 0.044 36 7 15 Red-7 3 3 0.3 0.3 0.999 0.998 0.143 0.153 0.040 27 7 15 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tsfy2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值