【问题标题】:Load and formatting file in python在 python 中加载和格式化文件
【发布时间】:2019-03-04 13:56:07
【问题描述】:

我有一个n行的文件,我想用python加载,格式是这样的

06:38:34 16.09.2017,  739648.4118,6077976.8575, 54.791616, 12.727939
06:38:35 16.09.2017,  739647.0628,6077975.6925, 54.791606, 12.727917

我希望它是这样的:

06 38 34 16 09 2017 739648.4118 6077976.8575  54.791616  12.727939
06 38 35 16 09 2017 739647.0628 6077975.6925  54.791606  12.727917

所以它变成了一个大小为(n,10)的数组。 我试过了

f=open('filename')
x.read()
f.close()

那么 x 是一个大小为 (1) 的字符串,所有数据都在一个元素中。我知道有一个名为split 的命令,但我无法让它正常工作。有什么可以帮忙的吗?

【问题讨论】:

  • .split() 仅适用于一种类型的字符,您需要拆分两种不同的类型(',' 和 ':')以获得所需的输出。你想对输出做什么?如果您想对其进行任何类型的数据分析,我建议您使用pandas 来加载和整理数据。

标签: python split formatting load


【解决方案1】:

这应该做你想要使用pandas实现的目标

import pandas as pd

df = pd.read_csv('<your file>', header=None, names=['DateTime', 'Num1', 'Num2', 'Num3', 'Num4'])
df['DateTime'] = pd.to_datetime(df['DateTime'])

# Split datetime object in to seperate columns as desired output format
df['hour'] = df['DateTime'].dt.hour
df['minute'] = df['DateTime'].dt.minute
df['second'] = df['DateTime'].dt.second
df['day'] = df['DateTime'].dt.day
df['month'] = df['DateTime'].dt.month
df['year'] = df['DateTime'].dt.year

# Drop the DateTime columns
df.drop('DateTime', inplace=True, axis=1)

# Switch the order of columns to desired order
df = df[['hour', 'minute', 'second', 'day', 'month', 'year', 'Num1', 'Num2', 'Num3', 'Num4']]

#export to file with ' ' as seperator
df.to_csv('output file.txt', sep=' ', index=False, header=None)

【讨论】:

    【解决方案2】:

    怎么样:

    with open('filename','r') as f:
        out = []
        a = f.read().replace(':',' ').replace(',','').split('\n')
        for i in a:
           out.append(i.split(' '))
        print(out[0:-1])
    
    

    [0:-1] 删除最后一个空元素

    【讨论】:

      【解决方案3】:

      我总是喜欢使用流水线方法处理文件,这样如果您的输入变得非常大,您就可以使用并发。无论如何,如果您使用的是 ipython,您可以使用 %timeit 轻松检查性能,但我会这样做:

      processed = ""
      
      def replace_char(line, char, replacement):
          return line.replace(char, replacement)
      
      with open('SOME_PATH') as fh:
          processed += replace_char(replace_char(fh.read(), ":", " "), ",", "")
      
      print(processed)
      
      # OUTPUT
      # 06 38 34 16.09.2017  739648.41186077976.8575 54.791616 12.727939
      # 06 38 35 16.09.2017  739647.06286077975.6925 54.791606 12.727917
      

      如果您想更改处理文件的方式,则使用这种方法只需更改 replace_char,或者根据需要编写一些其他函数。如果您需要并发,那么您可以使用multiprocessingasyncio 包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多