我正在编写一个简单的程序,在导入文本文件后输出基本图形。我收到以下错误:
Traceback (most recent call last):
File "C:\Users\Chris1\Desktop\attempt2\ex1.py", line 13, in <module>
x.append(int(xAndY[0]))
ValueError: invalid literal for int() with base 10: '270.286'
我的python代码如下所示:
import matplotlib.pyplot as plt
x = []
y = []
readFile = open ('temp.txt', 'r')
sepFile = readFile.read().split('\n')
readFile.close()
for plotPair in sepFile:
xAndY = plotPair.split(',')
x.append(int(xAndY[0]))
y.append(int(xAndY[1]))
print x
print y
plt.plot(x, y)
plt.title('example 1')
plt.xlabel('D')
plt.ylabel('Frequency')
plt.show()
我的文本文件片段如下所示:
270.286,4.353,16968.982,1903.115
38.934,68.608,16909.727,1930.394
190.989,1.148,16785.367,1969.925
问题似乎很小但似乎无法自己解决 感谢
答案 0 :(得分:0)
这很简单,只需将int
转换替换为float
:
for plotPair in sepFile:
xAndY = plotPair.split(',')
x.append(float(xAndY[0]))
y.append(float(xAndY[1]))
这将解决错误。
答案 1 :(得分:0)
如果要将浮点值转换为整数,只需更改
即可x.append(int(xAndY[0]))
y.append(int(xAndY[1]))
到
x.append(int(float(xAndY[0])))
y.append(int(float(xAndY[1])))
您收到错误,因为内置函数int
不接受float的字符串表示作为其参数。来自documentation:
<强> INT 强>( x = 0的)
int ( x,base = 10 )
...
如果 x 不是数字或者给定了base,则 x 必须是表示基数为整数的字符串或Unicode对象。可选地,文字可以在前面加+或 - (之间没有空格)并且用空格包围。 base-n文字由数字0到n-1组成,a到z(或A到Z)的值为10到35。
在您的情况下( x 不是数字,而是浮点数的字符串表示),这意味着该函数不知道如何转换该值。这是因为对于base=10
,参数只能包含数字[0-9],即不是.
(点),这意味着字符串不能表示浮点数。
我建议您查看numpy.loadtxt
,因为这样更容易使用:
x, y = np.loadtxt('temp.txt', # Load values from the file 'temp.txt'
dtype=int, # Convert values to integers
delimiter=',', # Comma separated values
unpack=True, # Unpack to several variables
usecols=(0,1)) # Use only columns 0 and 1
生成与修正后代码中相同的x
和y
列表。
通过此修改,您的代码可以缩减为
import matplotlib.pyplot as plt
import numpy as np
x, y = np.loadtxt('temp.txt', dtype=int, delimiter=',',
unpack=True, usecols=(0,1))
plt.plot(x, y)
plt.title('example 1')
plt.xlabel('D')
plt.ylabel('Frequency')
plt.show()