在 Python 中拆分一个 .dat 文件进行绘图
Splitting a .dat file in Python to plot
我有一个 .dat 文件,我想绘制文件中的一些数据。我使用 nom1 = open('file1.dat','rb').readlines()[3:]
删除了文件的前几行
.dat 文件在删除行后看起来像这样:
Flow 2012 9 22 24 0 230.0000 354.0856
Flow 2012 9 23 24 0 231.0000 353.0887
Flow 2012 9 24 24 0 236.0000 357.0877
Flow 2012 9 25 24 0 235.0000 358.0837
总共应该有 8 列,但它会将每一行读取为一大组字母和数字。我想根据第 7 列和第 8 列绘制 "columns" 2,3 和 4(示例 2012/9/22)中的时间。我考虑过使用拆分函数 nom2=nom1.split()
但我收到一条错误消息 AttributeError: 'list' object has no attribute 'split'
。下一个想法是尝试使用 delineate by white space 但不知道如何去做。如果有更快更有效的方法,请告诉我。另外,如果我太含糊,请告诉我。
谢谢
>>> file = open(r"class X.txt")
>>> type(file.readlines())
<class 'list'>
所以 readlines returns 一个列表?所以很明显,对其进行切片符号将不会跳过列表中的前 3 项。但该列表中到底包含什么?
>>> for line in file.readlines():
print(type(line))
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
所以每一行都作为一个单独的字符串读入!这意味着 [3:]
将跳过文件中的前 3 行,而不是列。好的,但是我们怎样才能得到实际的列?
>>> for line in file.readlines():
print(line.split())
['Flow', '2012', '9', '22', '24', '0', '230.0000', '354.0856']
['Flow', '2012', '9', '23', '24', '0', '231.0000', '353.0887']
好的,到了那里,我们只是将每个单独的字符串(行)拆分为存储在列表中的多个字符串。现在我们可以通过 [3:]
跳过前 3 列。我们需要一个地方来保存它。一个列表怎么样,其中每个元素都是我们需要的列的列表?
>>> interesting = []
>>> for line in file.readlines():
interesting.append(line.split()[3:])
>>> interesting
[['22', '24', '0', '230.0000', '354.0856'], ['23', '24', '0', '231.0000', '353.0887'], ['24', '24', '0', '236.0000', '357.0877'], ['25', '24', '0', '235.0000', '358.0837']]
>>> interesting[0]
['22', '24', '0', '230.0000', '354.0856']
瞧,我们开始了。想一想,希望它能把自己说清楚。
先读入csv文件,再拆分。
file = pd.read_csv('path/file.dat',header = None)
我有一个 .dat 文件,我想绘制文件中的一些数据。我使用 nom1 = open('file1.dat','rb').readlines()[3:]
.dat 文件在删除行后看起来像这样:
Flow 2012 9 22 24 0 230.0000 354.0856
Flow 2012 9 23 24 0 231.0000 353.0887
Flow 2012 9 24 24 0 236.0000 357.0877
Flow 2012 9 25 24 0 235.0000 358.0837
总共应该有 8 列,但它会将每一行读取为一大组字母和数字。我想根据第 7 列和第 8 列绘制 "columns" 2,3 和 4(示例 2012/9/22)中的时间。我考虑过使用拆分函数 nom2=nom1.split()
但我收到一条错误消息 AttributeError: 'list' object has no attribute 'split'
。下一个想法是尝试使用 delineate by white space 但不知道如何去做。如果有更快更有效的方法,请告诉我。另外,如果我太含糊,请告诉我。
谢谢
>>> file = open(r"class X.txt")
>>> type(file.readlines())
<class 'list'>
所以 readlines returns 一个列表?所以很明显,对其进行切片符号将不会跳过列表中的前 3 项。但该列表中到底包含什么?
>>> for line in file.readlines():
print(type(line))
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
所以每一行都作为一个单独的字符串读入!这意味着 [3:]
将跳过文件中的前 3 行,而不是列。好的,但是我们怎样才能得到实际的列?
>>> for line in file.readlines():
print(line.split())
['Flow', '2012', '9', '22', '24', '0', '230.0000', '354.0856']
['Flow', '2012', '9', '23', '24', '0', '231.0000', '353.0887']
好的,到了那里,我们只是将每个单独的字符串(行)拆分为存储在列表中的多个字符串。现在我们可以通过 [3:]
跳过前 3 列。我们需要一个地方来保存它。一个列表怎么样,其中每个元素都是我们需要的列的列表?
>>> interesting = []
>>> for line in file.readlines():
interesting.append(line.split()[3:])
>>> interesting
[['22', '24', '0', '230.0000', '354.0856'], ['23', '24', '0', '231.0000', '353.0887'], ['24', '24', '0', '236.0000', '357.0877'], ['25', '24', '0', '235.0000', '358.0837']]
>>> interesting[0]
['22', '24', '0', '230.0000', '354.0856']
瞧,我们开始了。想一想,希望它能把自己说清楚。
先读入csv文件,再拆分。
file = pd.read_csv('path/file.dat',header = None)