我有一个看起来像这样的文本文件(仅粘贴前几行):
x y
4 4
2 5
8 5
8 5
4 5
6 7
我需要阅读此文件并绘制x与y的关系图。这就是我的代码的样子:
import numpy as np
import matplotlib.pyplot as plt
with open("C:\Vikalp\Learning\Machine Learning\Practice\carstopping.txt") as f:
next(f)
data = f.read()
data = data.split('\n')
x = [(row.split('\t')[0]).strip() for row in data]
print(x)
y = [row.split('\t')[1] for row in data]
我的print(x)语句正在打印很多ascii东西:
['\x00', '\x004\x00', '\x00', '\x002\x00', '\x00', '\x008\x00', '\x00', '\x008\x00', '\x00', '\x004\x00', '\x00', '\x006\x00', '\x00', '\x007\x00', '\x00', '\x009\x00', '\x00', '\x008\x00', '\x00', '\x001\x003\x00', '\x00', '\x001\x001\x00', '\x00', '\x005\x00', '\x00', '\x005\x00', '\x00', '\x001\x003\x00', '\x00', '\x008\x00', '\x00', '\x001\x007\x00', '\x00', '\x001\x004\x00', '\x00', '\x001\x001\x00', '\x00', '\x002\x001\x00', '\x00', '\x001\x009\x00', '\x00', '\x001\x008\x00', '\x00', '\x002\x007\x00', '\x00', '\x001\x005\x00', '\x00', '\x001\x004\x00', '\x00', '\x001\x006\x00', '\x00', '\x001\x006\x00', '\x00', '\x001\x009\x00', '\x00', '\x001\x004\x00', '\x00', '\x003\x004\x00', '\x00', '\x002\x009\x00', '\x00', '\x002\x002\x00', '\x00', '\x004\x007\x00', '\x00', '\x002\x009\x00', '\x00', '\x003\x004\x00', '\x00', '\x003\x000\x00', '\x00', '\x004\x008\x00', '\x00', '\x005\x005\x00', '\x00', '\x003\x009\x00', '\x00', '\x004\x002\x00', '\x00', '\x003\x005\x00', '\x00', '\x005\x006\x00', '\x00', '\x003\x003\x00', '\x00', '\x005\x009\x00', '\x00', '\x004\x008\x00', '\x00', '\x005\x006\x00', '\x00', '\x003\x009\x00', '\x00', '\x004\x001\x00', '\x00', '\x007\x008\x00', '\x00', '\x005\x007\x00', '\x00', '\x006\x004\x00', '\x00', '\x008\x004\x00', '\x00', '\x006\x008\x00', '\x00', '\x005\x004\x00', '\x00', '\x006\x000\x00', '\x00', '\x001\x000\x001\x00', '\x00', '\x006\x007\x00', '\x00', '\x007\x007\x00', '\x00', '\x008\x005\x00', '\x00', '\x001\x000\x007\x00', '\x00', '\x007\x009\x00', '\x00', '\x001\x003\x008\x00', '\x00', '\x001\x001\x000\x00', '\x00', '\x001\x003\x004\x00', '\x00', '\x00']
如何摆脱所有这些特殊字符?
修改
根据建议,我将代码修改为以下内容:
import numpy as np
import matplotlib.pyplot as plt
file_data = np.genfromtxt("C:\Vikalp\Learning\Machine Learning\Practice\carstopping.txt", usecols=(0,1), skip_header=1, dtype=str)
print(file_data)
x = file_data[:,0]
print(x)
y = file_data[:,1]
print(y)
这是我在控制台中得到的:
[['\x004' '\x004']
['\x002' '\x005']
['\x008' '\x005']
...,
['\x001\x003\x008' '\x003\x009']
['\x001\x001\x000' '\x004\x000']
['\x001\x003\x004' '\x004\x000']]
['\x004' '\x002' '\x008' ..., '\x001\x003\x008' '\x001\x001\x000'
'\x001\x003\x004']
['\x004' '\x005' '\x005' ..., '\x003\x009' '\x004\x000' '\x004\x000']
不知道为什么我会得到所有这些角色。为了摆脱它们,我包括以下行:
x = str(x).replace('\\x00','')
y = str(y).replace('\\x00','')
有了这个,我在控制台中得到以下输出:
[['\x004' '\x004']
['\x002' '\x005']
['\x008' '\x005']
...,
['\x001\x003\x008' '\x003\x009']
['\x001\x001\x000' '\x004\x000']
['\x001\x003\x004' '\x004\x000']]
['4' '2' '8' ..., '138' '110'
'134']
['4' '5' '5' ..., '39' '40' '40']
因此,x和y现在是字符串列表。不知道如何将它们转换为整数。试过以下:
x = list(map(int,x))
给出了这个错误:
File "C:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
execfile(filename, namespace)
File "C:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Vikalp/Learning/Machine Learning/Practice/lr_practice_1.py", line 28, in <module>
x = list(map(int,x))
ValueError: invalid literal for int() with base 10: '['
请帮助解决这三个问题: 1.如何处理像/ x00这样的特殊字符以及它们为什么出现。文本文件似乎很干净。 2.如何将字符串列表转换为int列表 3.什么是最好的写这段代码?
答案 0 :(得分:2)
您可以使用numpy.loadtext
执行此任务
>>> import numpy as np
>>> array_txt = np.loadtxt("C:\Vikalp\Learning\Machine Learning\Practice\carstopping.txt",usecols=(0, 1), skiprows=1)
>>> array_txt
array([[ 4., 4.],
[ 2., 5.],
[ 8., 5.],
[ 8., 5.],
[ 4., 5.],
[ 6., 7.]])
>>> x = array_txt[:,0]
>>> x
array([ 4., 2., 8., 8., 4., 6.])
>>> y = array_txt[:,1]
>>> y
array([ 4., 5., 5., 5., 5., 7.])
答案 1 :(得分:2)
您的文件是UTF-16-LE文件。所以你需要添加编码参数。
public static void main(String[] args) { }
答案 2 :(得分:0)
我将按照建议使用numpy.loadtxt。但是,我认为您需要设置定界符参数。
例如
public function do_add_menu_accounts($chkmenus,$chknamedivsect) {
$sql_check = "SELECT
fsiportaldb2.tbl_user_access.account_id,
fsiportaldb2.tbl_user_access.menu_id,
fsiportaldb2.tbl_accounts.account_id AS account_id1
FROM
fsiportaldb2.tbl_user_access
INNER JOIN fsiportaldb2.tbl_accounts ON fsiportaldb2.tbl_accounts.account_id = fsiportaldb2.tbl_user_access.account_id"
;
$sql="INSERT INTO tbl_user_access (`menu_id`,`account_id`) VALUES (?,?)";
$data = array($chkmenus, $chknamedivsect);
$query_1 = $this->db->query($sql_check,$data);
$query = $this->db->query($sql,$data);
if ($query_1)
{
echo "Values already exist!";
}else{
return $query;
}
}
默认情况下,分隔符为空格。