我正在尝试使用数字和字母(作为标题)从文本文件创建数组,但是当我尝试转换并打开我的文件时,我最终得到错误:
ValueError:float()的文字无效:0
或
ValueError:无法将字符串转换为float:AA
我知道这是一个数据类型的问题,并且想知道是否有人知道解决这个问题的方法?我是python的新手,通常是Matlab中的代码。我的文本文件包含:
<a href="@Url.Action("Action", "Controller", new { id = Model.Id }, "https")">Click Here</a>
我试过的代码在
之下AA, AB, AC, AD, AE, AF, AG, AH, AI
0, 1, 0, 1, 1, 0, 1, 0, 0
之后,我需要剪切所有具有零的列并保留其中包含1的列。要加载的文本文件每次都会有所不同,我只需要查看哪些单元格和标题已填入1。
答案 0 :(得分:0)
numpy.loadtxt()
允许使用dtype参数,这样的内容将读取混合数据:
import numpy as np
a = np.loadtxt('test.txt', dtype=object)
所以,既然我们已经回答了如何让numpy.readtxt()
读取我的文件,那么我们将如何解决分析文件中的0和1的问题。以下代码片段在文件中读取,然后查找哪些列包含任何列和所有列。
1:使用csv模块
csv模块可用于解析此文件。
import csv
with open('file1', 'rU') as csvfile:
csv_reader = csv.reader(csvfile)
# read the first line as the header
header = [c.strip() for c in next(csv_reader)]
# read the remaining lines, and transpose them into columns using zip()
cols = list(zip(*((int(c) for c in l) for l in csv_reader)))
# now lets find all the columns which have any and all ones
any_ones = [l for l, v in zip(header, cols) if any(v)]
all_ones = [l for l, v in zip(header, cols) if all(v)]
print(any_ones)
print(all_ones)
2:使用pandas
pandas
也可用于完成这项工作。比上面更多的学习曲线,但你得到你付出的代价。
df = pd.read_csv('file1')
# remove spaces from column names
df = df.rename(columns={x: x.strip() for x in df.columns})
any_ix = df.any()
all_ix = df.all()
print(list(any_ix[any_ix].index))
print(list(any_ix[all_ix].index))
csv和pandas的结果
['AB', 'AD', 'AE', 'AG']
['AB', 'AE']
<强> File1中:强>
AA, AB, AC, AD, AE, AF, AG, AH, AI
0, 1, 0, 1, 1, 0, 0, 0, 0
0, 1, 0, 0, 1, 0, 1, 0, 0
答案 1 :(得分:0)
让我们说你的文件名为file.text
,里面有:
AA, AB, AC, AD, AE, AF, AG
0, 1, 0, 1, 1, 0, 1, 0, 0
您可以使用以下方式阅读该文件:
with open('file.txt', 'r') as f:
read_file = f.read()
从字符串创建列表(即read_file
现在是什么):
list_entries = read_file.split(',')
打印列表中的每个条目(替换\n
新行字符):
for entry in list_entries:
print entry.replace('\n', '')