[英]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。 這是一些有用的鏈接
希望對您有所幫助。
更新
盡管不清楚要精確繪制的內容,但我想您真正想要的是關於數據文件中第一列和第二列的散點圖。 如果是這樣,則可能需要修改一些代碼。 下面是一個例子。
假設您的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.