簡體   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