繁体   English   中英

python:循环遍历txt文件并删除字符串的前几行

[英]python: loop through txt files and delete first few rows of strings

我有文本文件,其中每个文件都有90列时间长度不同的时间序列数据。 在这90列之前,有6行我要删除的垃圾字符串数据。 从第7行开始,数据均为float类型。

我已经尝试了以下操作,但是对我的文件没有任何更改:

folder = '/Users/LR/Desktop/S2'
files = os.listdir(folder)
for filename in files:
       lines = open(filename).readlines()
       open(filename, 'w').writelines(lines[6:])

我还尝试加载文件并跳过前6行,但是除非设置dtype ='str',否则numpy.loadtxt无效。 它成功切出了前6行。但是它作为字符串ndarray对象导入,我不知道如何将其转换为float数组。

data = np.loadtxt('STS2.txt', delimiter = '\t', skiprows=6, dtype='str')
data = data.astype(float) # this gives the error: ValueError: could not convert string to float: 

当我设置dtype = float时,我得到了相同的ValueError:

data_float = np.loadtxt('STS2.txt', delimiter='\t', dtype=float, skiprows=7) # this gives the error: ValueError: could not convert string to float: 

有人知道解决此问题的方法吗?

您可以使用pandas来帮助您。 使用下面的代码:

import pandas as pd
import numpy as np

df = pd.read_csv('STS1.txt', delimiter='\t', skiprows=[0,1,2], index_col=0)
df = df.T.set_index(np.nan, append=True).T

我能够加载下表:

在此处输入图片说明

请注意,您的列现在是分层的。 您可以检查您的类型:

df.dtypes

输出:

1      float64
2      float64
3      float64
4      float64
...

您还可以轻松地将数据转换为例如int

df = df.fillna(0).astype(int)

每行的最后一个字段是一个空字符串,因此numpy无法将其解析为float 无论如何,您只对前90列感兴趣,因此添加usecols=range(90)

np.loadtxt('STS2.txt', skiprows=6, usecols=range(90))

(当然,如果您已经砍掉了前六行,则现在可以删除skiprows=6

编辑

由于第一列似乎只是一个索引,因此可以使用usecols=range(1, 90)忽略它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM