我对Python比较了解,所以如果这是一个愚蠢的问题,请耐心等待,但我自己无法弄明白。对于我可能错过的问题的任何指示,我也很高兴。
因此,我的文件内容如下:
file.txt的
N 38668442 0.32%
V 14008521 0.12%
ADJ 16112215 0.13%
N 375644830 3.13%
V 380340512 3.17%
ADJ 438651326 3.66%
N 691647661 5.77%
V 832219601 6.94%
ADJ 540782210 4.51%
我喜欢使用matplotlib将file.txt的百分比转换成一个图,其中包含以下代码(摘录):
import numpy as np
import matplotlib.pyplot as plt
# data to plot
n_groups = 3
N = (0.32, 3.13, 5.77)
V = (0.12, 3.17, 6.94)
ADJ = (0.13, 3.66, 4.51)
# create plot
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.25
opacity = 0.7
rects1 = plt.bar(index, N, bar_width,
alpha=opacity,
color='darkred',
label='N')
rects2 = plt.bar(index + bar_width, V, bar_width,
alpha=opacity,
color='green',
label='V')
rects3 = plt.bar(index + bar_width + bar_width, ADJ, bar_width,
alpha=opacity,
color='darkblue',
label='ADJ')
plt.xlabel('Category')
plt.ylabel('Percentage')
plt.xticks(index + bar_width + bar_width + bar_width + bar_width, ('1.5', '2', '2.5'))
plt.ylim(0, 100)
plt.tight_layout()
plt.show()
在此代码中,N,V和ADJ都是元组。所以,我想从file.txt读取百分比(没有百分号)到一个元组,然后可以用它来生成图(而不是手动为N,V,ADJ输入值)。
我设法从文件创建元组但不幸的是,如果我使用生成的元组,则会引发错误消息。元组之间有什么区别?我错过了什么或误解了什么?
从file.txt生成元组的代码
with open('file.txt', 'r') as f:
N_lines = []
V_lines = []
ADJ_lines = []
for line in f:
if line.startswith("N"):
line = line.strip()
line = line[:-1]
parts = line.split("\t")
N_lines.append(parts[2])
if line.startswith("V"):
line = line.strip()
line = line[:-1]
parts = line.split("\t")
V_lines.append(parts[2])
if line.startswith("ADJ"):
line = line.strip()
line = line[:-1]
parts = line.split("\t")
ADJ_lines.append(parts[2])
N = tuple(N_lines)
V = tuple(V_lines)
ADJ = tuple(ADJ_lines)
另外,我打印了我的元组,它们看起来略有不同,因为引号在项目周围,所以我试图删除它们。
我非常感谢任何帮助或建议!
答案 0 :(得分:1)
文件中的元组实际上包含字符串。这就是他们无法绘制的原因。
要读入文件,您可以使用下面的代码。
它会将文本文件中的值转换为没有百分号的小数,以便您可以在绘图代码中使用它们。
import Decimal as dc
with open('file.txt','r') as f:
N_lines = []
V_lines = []
ADJ_lines = []
for line in f:
if line.startswith("N"):
line = line.strip()
line = line[:-1]
parts = line.split("\t")
N_lines.append(dc.Decimal(parts[2][:-1]))
elif line.startswith("V"):
line = line.strip()
line = line[:-1]
parts = line.split("\t")
V_lines.append(dc.Decimal(parts[2][:-1]))
elif line.startswith("ADJ"):
line = line.strip()
line = line[:-1]
parts = line.split("\t")
ADJ_lines.append(dc.Decimal(parts[2][:-1]))