绘制.txt文件中两列的数据(Python)

时间:2018-01-24 14:49:08

标签: python plot

我是OSX上的Python新手,需要在.txt文件中绘制两列数据。在Windows上我使用'x [:,0]'函数来表示列,虽然这似乎在Mac上不起作用。我尝试过以下方法:

f = open(os.path.expanduser("~/Desktop/a.txt.rtf"))

lines=f.readlines()

result=[]

for x in lines:
    result.append(x.split(' ')[0])

for y in lines:
    result.append(y.split(' ')[1]) 

f.close()

plt.plot(x,y)
plt.show()

但它表示列表索引超出范围,即使测试文件只是:

1  2
3  4
5  6
7  8

怎么会这样?请帮忙!

解决这个问题后,我需要知道Mac替代“skip_header =”函数(因为我想要使用的文件有我需要的数据,从25行开始......)

提前致谢,对不起,如果这些是简单的查询,但我无法让它发挥作用:(

1 个答案:

答案 0 :(得分:3)

这根本不是一个简单的问题。这是一个非常好的问题,许多人在日常工作中面临同样的问题。你的问题也会帮助别人!

错误是因为您正在尝试阅读所谓的Rich Text Format file (RTF)。因此,文件的真实内容与您在屏幕上看到的不同,而是编码字符串。

而不是

['1  2', '3  4',...]

f.readline()实际上生成类似

的内容
['{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff31507\\deff0\\stshfdbch31505\\stshfloch31506\\stshfhich31506\\stshfbi31507\\...]

因此,当您尝试索引拆分行时,会导致索引超出范围错误。

解决这个问题的3个想法。首先,您可以考虑将RTF转换为纯文本,并使用readline()读取文本文件。或者,您可以使用某些第三方解析器阅读RTF。或者,您可以使用正则表达式自己解析RTF。这是一些有用的链接

convert RTF

parse RTF

希望它有所帮助。

<强>更新

虽然目前还不是很清楚你想要绘制的内容,但我猜你真正想要的是关于数据文件中第1和第2列的散点图。如果是这样,您可能需要修改一下代码。以下是一个例子。

假设您的a.txt文件(不是rtf)包含内容

1  2
3  4
5  6
7  8

您可以这样绘制x y散点图,第1列为x第2列为y。

import matplotlib.pyplot as plt
f = open(os.path.expanduser("a.txt"))
lines = f.readlines()

x, y = [], []

for line in lines:
    x.append(line.split()[0])
    y.append(line.split()[1])

f.close()

print(x, y)

plt.plot(x,y)
plt.show()

或使用单行

f = open(os.path.expanduser("a.txt"))
lines = f.readlines()

x, y = zip(*(line.split() for line in lines))

f.close()

print(x, y)

plt.plot(x,y)
plt.show()