【问题标题】:Extract data from a text file with keywords using Python使用 Python 从带有关键字的文本文件中提取数据
【发布时间】:2019-11-13 19:10:19
【问题描述】:

我正在处理一个文本数据文件,我可以使用以下方法从 CSV/XLSX 中提取数据:

import pandas as pd

token = open('file.txt','r')
linestoken = token.readlines()
resulttoken = []
for x in linestoken:
    resulttoken.append(x.split())
token.close()

df = pd.DataFrame(resulttoken)
df.to_csv('file.csv', index=None, header=None)

print('done!')

但我的文件有关键字来区分来自不同来源的数据(例如来自不同批次的实验)。数据结构如下

关键字1

第 1 列第 2 列第 3 列第 4 列 ....

关键字2

第 1 列第 2 列第 3 列第 4 列 ....

关键字3

第 1 列第 2 列第 3 列第 4 列 ....

等等……

使用我使用的代码,我只能提取分成不同列的数据,但我想在 Excel 工作簿中为每个关键字创建工作表,并将其以下相关数据植入其中。 我将非常感谢这方面的任何帮助。

谢谢!

【问题讨论】:

    标签: python pandas text-files


    【解决方案1】:

    CSV 文件没有工作表,因此您无法使用 to_csv() 执行此操作。试试这个:

    df.to_excel('file.xlsx', index=None, header=None, sheet_name=tabname)
    

    根据 Pandas 文档:

    可以通过指定唯一的 sheet_name 来写入多个工作表。 将所有数据写入文件后,有必要保存更改。

    【讨论】:

      【解决方案2】:

      假设每个源(关键字)可以在文件中的不同点重复出现,第一个任务是按源对所有数据行进行分组。完成后,我们可以将每个源的数据写入单独的 CSV 文件(因为如上所述,CSV 文件不能有工作表)。

      此 Python 2 程序假定您的数据文件适合 RAM:

      import collections
      import csv
      import os
      
      tally = collections.defaultdict( list )
      
      with open( 'file.txt', 'r' ) as f:
          lines = f.readlines()
      for i in range( 0, len(lines), 2 ):
          # lines[i] is source.  < .rstrip() > removes trailing newline character.
          # lines[i+1] is row of data, as a single string.
          tally[ lines[i].rstrip() ].append( lines[i+1] )
      
      # Output files go into already-existing subdirectory called "subdirectory"
      for source, data_rows in tally.items():
          with open( os.path.join( 'subdirectory', '%s.csv' % source ), 'wb' ) as csvfile:
              filewriter = csv.writer( csvfile )        # Can tailor delimiter, etc.
              for data_row in data_rows:
                  filewriter.writerow( data_row.split() )
      

      使用csv 包是一种比使用 Pandas 更轻量级的解决方案。对于较大的数据集,您可以根据需要打开 CSV 文件,并在解析输入文件时保持打开状态。但是对于涉及分组的快速而肮脏的脚本,我发现collections.defaultdict( list ) 非常方便。

      【讨论】:

        猜你喜欢
        • 2021-07-07
        • 1970-01-01
        • 2022-01-09
        • 2013-03-13
        • 1970-01-01
        • 2022-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多