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 行,但是 numpy.loadtxt 不起作用,除非我设置 dtype = 'str'。它成功地删除了前 6 行。但它作为字符串 ndarray 对象导入,我无法弄清楚如何将它转换为浮点数组。
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
我能够加载以下 table:
请注意,您的列现在是分层的。您可以检查您的类型:
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)
忽略它。
我有一些文本文件,其中每个文件都有 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 行,但是 numpy.loadtxt 不起作用,除非我设置 dtype = 'str'。它成功地删除了前 6 行。但它作为字符串 ndarray 对象导入,我无法弄清楚如何将它转换为浮点数组。
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
我能够加载以下 table:
请注意,您的列现在是分层的。您可以检查您的类型:
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)
忽略它。