我对python并不是很熟悉,所以谷歌搜索和教育猜测让我尝试了一个列表推导解决方案,但我想象的格式有问题。这行给了我一个语法错误,所以有没有办法解决它?
3dCSV = [[0 for _ in range(2)]list(csv.reader(open(sys.argv[1])))]
任何帮助将不胜感激,谢谢!
csv实际上只是一个二维数组。
示例:
9 4 3 5 4
3 9 4 7 2
4 1 6 3 4
3 4 8 2 8
只是想在其上添加第三个维度来保存0或1(基本上是一个布尔值),这样我就可以测试list[a][b][0]
并根据我得到的输出,在{{1中放置0或1 }}。我不确定如何提供更好的例子?
答案 0 :(得分:0)
这是一个简短的例子,它只是从文件中读取行,在空白处拆分它们并将每个项目转换为配对[int, None]
:
import pprint
with open('source.csv') as f:
res = [[[int(x), None] for x in row.split()] for row in f]
res[1][2][1] = (res[1][2][0] % 2 == 0)
pprint.pprint(res)
输出:
[[[9, None], [4, None], [3, None], [5, None], [4, None]],
[[3, None], [9, None], [4, True], [7, None], [2, None]],
[[4, None], [1, None], [6, None], [3, None], [4, None]],
[[3, None], [4, None], [8, None], [2, None], [8, None]]]
在上面for row in f
中,只需逐个读取文件中的行:
>>> rows = [row for row in f]
>>> rows
['9 4 3 5 4\n', '3 9 4 7 2\n', '4 1 6 3 4\n', '3 4 8 2 8\n']
然后for x in row.split()
使用str.split
在每个空格处拆分行:
>>> rows = [[x for x in row.split()] for row in f]
>>> rows
[['9', '4', '3', '5', '4'], ['3', '9', '4', '7', '2'], ['4', '1', '6', '3', '4'], ['3', '4', '8', '2', '8']]
由于我们希望在最终结果中使用[int, None]
元素而不是字符串,因此我们会相应地转换每个元素:
>>> rows = [[[int(x), None] for x in row.split()] for row in f]
>>> print(*rows, sep='\n')
[[9, None], [4, None], [3, None], [5, None], [4, None]]
[[3, None], [9, None], [4, None], [7, None], [2, None]]
[[4, None], [1, None], [6, None], [3, None], [4, None]]
[[3, None], [4, None], [8, None], [2, None], [8, None]]
答案 1 :(得分:0)
import csv
filename='something.csv' #Enter your filename
with open(filename, 'r') as csvfile:
_3dcsv = list(csv.reader(csvfile))
for index, i in enumerate(_3dcsv):
for index2, e in enumerate(i):
_3dcsv[index][index2]={e:True} #or false
输出:
[[{'1': True}, {'2': True}, {'3': True}, {'4': True}, {'5': True}],
[{'4': True}, {'5': True}, {'2': True}, {'3': True}, {'5': True}],
[{'4': True}, {'5': True}, {'6': True}, {'7': True}, {'1': True}]]
答案 2 :(得分:0)
如果您要处理很多CSV文件和数组样式数据,那么您应该查看numpy这是python的数组/数学库。安装它和python的最简单方法是从https://www.continuum.io/downloads安装 Anaconda Python发行版
安装了numpy的执行此操作:
import numpy as np
您需要指定数据类型(int表示整数或浮点数 如果您的数字不浮动,则浮点数是默认值。
arr2d = np.loadtxt(sys.argv[1], dtype=int)
print(arr2d)
输出:
array([[9, 4, 3, 5, 4],
[3, 9, 4, 7, 2],
[4, 1, 6, 3, 4],
[3, 4, 8, 2, 8]])
现在创建一个相同形状的布尔数组,其中所有值都大于3(作为示例。
arrbool = arr2d > 3
print(arrbool)
输出
[[ True True False True True]
[False True True True False]
[ True False True False True]
[False True True False True]]
使用arrbool数组作为掩码,仅设置True位置的值 一些数字(制作一个数组的副本,或者你将修改原文)。
arrcopy = arr2d.copy()
arrcopy[arrbool] = 1
print(arrcopy)
输出:
array([[1, 1, 3, 1, 1],
[3, 1, 1, 1, 2],
[1, 1, 1, 3, 1],
[3, 1, 1, 2, 1]])