使用Python列表和数组

使用Python列表和数组,python,arrays,Python,Arrays,在使用多维数组多年之后,“列表”的Python数组概念对我来说似乎相当复杂(尽管据说它更优越)。 我有长(数千行)二维数组文件,其中包含十六进制值,格式如下(可以有行分隔,也可以没有行分隔): 我希望在Python中使用该文件,提取和操作任意随机元素。 我意识到我必须将文件转换为列表,并使用该列表。 文件的长度(记录数)是动态的,宽度(每个记录中的元素)是固定的。 哪一种是最有效的Python方法? 如果需要,我可以更改文件格式(分隔符等)。 新编辑: 根据我收到的几个答复中的一些线索,我设法取

在使用多维数组多年之后,“列表”的Python数组概念对我来说似乎相当复杂(尽管据说它更优越)。
我有长(数千行)二维数组文件,其中包含十六进制值,格式如下(可以有行分隔,也可以没有行分隔):

我希望在Python中使用该文件,提取和操作任意随机元素。
我意识到我必须将文件转换为列表,并使用该列表。
文件的长度(记录数)是动态的,宽度(每个记录中的元素)是固定的。 哪一种是最有效的Python方法? 如果需要,我可以更改文件格式(分隔符等)。
新编辑:
根据我收到的几个答复中的一些线索,我设法取得了进展,但问题仍然存在。
以下是我所做的,但在最后,我无法使其像2-dim阵列一样工作,如所附代码所示:

>>> test1 = open("C:/testdata1.txt", 'r') #This opens automatically as a 
#list, but with line breaks and no start and end brackets.
>>> test2 = test1.read()                # Convert to string
>>> test2 = test2.replace("\n","")      # Remove line breaks
>>> test2 = "[" + test2 + "]"           # Add brackets
>>> print(test2)

# The result looks like pure 2-dim list, but does not behave like one:
[[0x0,0x42,0x2A],[0x229,0x44,0x7C],[0x452,0x40,0x03],[0xCF9,0x4E,0x08], 
[0xF26,0x70,0x66],[0x1158,0x72,0xA6],[0x1388,0x72,0xB6],]

#This gives an error
>>> print(test2[1][2])
Traceback (most recent call last):
  File "<pyshell#79>", line 1, in <module>
    print(test2[1][2])
IndexError: string index out of range

#But it runs like one-dim array of chars
>>> print(test2[8])
4
>>>
# If I copy and paste the above list as a new list, it works nicely!

Can better use:
>>> with open("C:/testdata1.txt", 'r') as file:
     for line in file:
     file.read()
# But, again, reading result with line breaks, no brackets.
 '[0x229,0x44,0x7C],\n[0x452,0x40,0x03],\n[0xCF9,0x4E,0x08],
 \n[0xF26,0x70,0x66],\ n[0x1158,0x72,0xA6],\n[0x1388,0x72,0xB6],'
>>test1=open(“C:/testdata1.txt,'r')#这将作为
#列表,但有换行符,没有开始和结束括号。
>>>test2=test1.read()#转换为字符串
>>>test2=test2.替换(“\n”,““”)#删除换行符
>>>test2=“[”+test2+“]”添加括号
>>>打印(测试2)
#结果看起来像纯粹的2维列表,但行为不像:
[0x0,0x42,0x2A]、[0x229,0x44,0x7C]、[0x452,0x40,0x03]、[0xCF9,0x4E,0x08],
[0xF26,0x70,0x66],[0x1158,0x72,0xA6],[0x1388,0x72,0xB6],]
#这是一个错误
>>>打印(test2[1][2])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
打印(test2[1][2])
索引器错误:字符串索引超出范围
#但它运行起来就像一个暗淡的字符数组
>>>打印(test2[8])
4.
>>>
#如果我复制并粘贴上面的列表作为一个新的列表,它工作得很好!
可以更好地使用:
>>>打开(“C:/testdata1.txt”,“r”)作为文件:
对于文件中的行:
file.read()文件
#但是,同样,阅读结果是换行,没有括号。
“[0x229,0x44,0x7C],\n[0x452,0x40,0x03],\n[0xCF9,0x4E,0x08],
\n[0xF26,0x70,0x66],\n[0x1158,0x72,0xA6],\n[0x1388,0x72,0xB6],'

如果您真的可以随心所欲地格式化文件,只需将其设置为Python模块即可:

# bigarray.py

bigarray = [
[0xF26,0x70,0x66],[0x1158,0x72,0xA6],[0x1388,0x72,0xB6],
[0x15BA,0x4E,0x08],[0x17E9,0x70,0x92],[0x1A1D,0x72,0x94],
[0x1C4F,0x72,0xB4],[0x4409,0x4A,0x14], # etc. etc.
]
来自其他模块的信息:

# mymodule.py

from bigarray import bigarray

print(bigarray[1][2])

如果您真的可以随心所欲地格式化文件,只需将其设置为Python模块即可:

# bigarray.py

bigarray = [
[0xF26,0x70,0x66],[0x1158,0x72,0xA6],[0x1388,0x72,0xB6],
[0x15BA,0x4E,0x08],[0x17E9,0x70,0x92],[0x1A1D,0x72,0x94],
[0x1C4F,0x72,0xB4],[0x4409,0x4A,0x14], # etc. etc.
]
来自其他模块的信息:

# mymodule.py

from bigarray import bigarray

print(bigarray[1][2])
试试这个:

with open("filename.txt","r") as f:
    [[hex(r) for r in e.split(",")] for e in f.read().replace("\n","")[1:-2].split("],[")]
试试这个:

with open("filename.txt","r") as f:
    [[hex(r) for r in e.split(",")] for e in f.read().replace("\n","")[1:-2].split("],[")]

嗯,经过大量的测试和尝试,我发现(简单的)解决方案如下:

我有一个excel csv输出文件,格式如下:(在excel中添加了逗号和括号):

我处理了数据并“清理”了它,使其成为Python 2维列表格式 (必须删除换行符,删除尾随逗号,添加开始和结束括号,请参见我的原始问题编辑)):

[[0x0,0x42,0x2A]、[0x229,0x44,0x7C]、[0x452,0x40,0x03]、[0xCF9,0x4E,0x08]。

问题是,尽管它看起来像2维列表,但Python将其解释为字符串

最后,在一个旧线程的帮助下,我找到了如何将“合法”Python字符串转换为Python列表的解决方案: myList=eval(字符串)

之后,该结构表现得像一个漂亮的2维列表(数组)。 这很简单,但我花了几个小时才找到

完整代码:

>>> test = eval("[" + (open("C:/testdata1.txt" , 'r').read().replace("\n","").rstrip(",") + "]"))
>>> print(hex(test[1][2]))
0x7c

感谢所有试图帮助我的人。

好吧,经过大量的测试和尝试,我找到了如下(简单)解决方案:

我有一个excel csv输出文件,格式如下:(在excel中添加了逗号和括号):

我处理了数据并“清理”了它,使其成为Python 2维列表格式 (必须删除换行符,删除尾随逗号,添加开始和结束括号,请参见我的原始问题编辑)):

[[0x0,0x42,0x2A]、[0x229,0x44,0x7C]、[0x452,0x40,0x03]、[0xCF9,0x4E,0x08]。

问题是,尽管它看起来像2维列表,但Python将其解释为字符串

最后,在一个旧线程的帮助下,我找到了如何将“合法”Python字符串转换为Python列表的解决方案: myList=eval(字符串)

之后,该结构表现得像一个漂亮的2维列表(数组)。 这很简单,但我花了几个小时才找到

完整代码:

>>> test = eval("[" + (open("C:/testdata1.txt" , 'r').read().replace("\n","").rstrip(",") + "]"))
>>> print(hex(test[1][2]))
0x7c

感谢所有试图帮助我们的人。

您是否尝试过任何您可以提供给我们的代码?数组格式为3xN?数组格式为n行乘3列。任何程序都可以将十六进制(字符串)转换为值。由于格式是Pythonian,我尝试使用array调用元素,但它不起作用。我试过各种代码,但都没有用。你试过你能提供给我们的任何代码吗?数组格式是3xN?数组格式是n行乘3列。任何程序都可以将十六进制(字符串)转换为值。由于格式是Pythonian,我尝试使用array调用元素,但它不起作用。我尝试过各种代码,但都没有用。此解决方案不处理导入的文件,而导入的文件正是问题的根源。如本例所示,当手动构建数据时,一切正常,但我有数千条记录。此解决方案不处理导入的文件,而导入的文件正是问题的根源。如本例所示,当手动构建数据时,一切正常,但我有数千条记录。ASAIK,这是为了清理文件并将其列为列表。我已经试过了,但是它会出现很多错误,而且,正如我在主要问题中添加的文本中所看到的,但是列表对我不起作用,可能在“清理”列表中有一些隐藏的字符??ASAIK,这是为了清理文件并使其成为一个列表。我已经试过了,但它会出现很多错误,而且,正如我在主要问题中添加的文本所示,但是列表对我不起作用,可能在“干净”列表中有一些隐藏的字符??