繁体   English   中英

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

[英]Plotting data from two columns in a .txt file (Python)

我是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行开始的数据...)

在此先感谢您,如果这些都是简单的查询,对不起,但是我不能使其工作:(

这根本不是一个容易的问题。 这是一个很好的问题,许多人的日常工作也面临同样的问题。 您的问题也会对他人有所帮助!

该错误是因为您正在尝试读取所谓的RTF格式文件(RTF) 因此,文件的真实内容不像您在屏幕上看到的那样,而是编码的字符串。

代替

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

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

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

因此,当您尝试索引分割线时,会出现索引超出范围错误。

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

转换RTF

解析RTF

希望对您有所帮助。

更新

尽管不清楚要精确绘制的内容,但我想您真正想要的是关于数据文件中第一列和第二列的散点图。 如果是这样,则可能需要修改一些代码。 下面是一个例子。

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

1  2
3  4
5  6
7  8

您可以执行此操作以将第一列作为x第二列作为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()

暂无
暂无

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

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