如何用Python将my.txt中特定格式数据转存为CSV文件?
解决方案
看起来你已经开了个好头!咱们来一步步把这个文本转成你要的目标格式。首先得拆解输入文本的结构:你的my.txt里,每个水果的完整信息是由+ x [水果名]、+ y [数字]、+ z [数字]、+ a [数字]这四个片段依次组成的,前面的版本、标识类头信息可以直接忽略。
下面是完整的代码实现,你可以直接补充到你的现有代码后面:
# 先定义输出文件名 output_file = "output.csv" with open(Unzipped_file_name) as f: # 读取整个文件内容(因为你的输入看起来是连在一起的一行) content = f.read().strip() # 按"+ "分割内容,把每个属性片段拆出来 all_parts = content.split("+ ") # 过滤掉非数据的头信息,只保留x/y/z/a开头的有效片段 data_segments = [part.strip() for part in all_parts if part.startswith(('x ', 'y ', 'z ', 'a '))] # 写入目标文件:每4个片段对应一个水果的一行数据 with open(output_file, 'w') as out_f: # 每4个片段为一组循环 for i in range(0, len(data_segments), 4): # 提取每个属性的值 fruit_name = data_segments[i].split()[1] y_val = data_segments[i+1].split()[1] z_val = data_segments[i+2].split()[1] a_val = data_segments[i+3].split()[1] # 按空格分隔写入一行 out_f.write(f"{fruit_name} {y_val} {z_val} {a_val}\n")
代码解释:
- 读取文件内容:因为你的输入文本是连续的一行(而非逐行的条目),所以用
read()一次性读取全部内容更高效。 - 拆分与过滤:用
split("+ ")把每个+开头的属性片段拆出来,然后过滤掉前面的头信息,只保留我们需要的x/y/z/a相关片段。 - 分组写入:每4个片段对应一个水果的完整信息,循环提取每个属性的值,按你要的格式拼接成一行写入输出文件。
如果你的实际输入文本是逐行存储的(比如每个+开头的内容单独一行),那可以用这个更灵活的版本:
output_file = "output.csv" current_fruit = [] with open(Unzipped_file_name) as f, open(output_file, 'w') as out_f: for line in f: line = line.strip() # 跳过非数据的头信息行 if not line.startswith('+ '): continue # 提取属性值 key, val = line.lstrip('+ ').split(maxsplit=1) current_fruit.append(val) # 收集够4个属性就写入一行并重置 if len(current_fruit) == 4: out_f.write(' '.join(current_fruit) + '\n') current_fruit = []
内容的提问来源于stack exchange,提问作者sachin sarangamath
相关产品推荐
相关产品推荐

