Python:将txt文件加载到不同类型的2d列表中

时间:2018-08-30 09:48:44

标签: python

我在一个文本文件中保存了一个二维列表,看起来像这样(显示前两个条目):

('9b7dad', "text", 'http://imgur.com/gallery/SPdGm27', '1', 'A', 5)
('2b6ebj', 'text2', 'https://i.redd.it/lzft358csdi21.jpg', '1', 'B', 6)

应如何将其加载到列表中? (例如list[0][0] = '9b7dad'list[1][1] = 'text2'等)

5 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

f = open(<your file path>)
result = [
    [g.replace("'", "")
     for g in l.strip('()\n').replace(' ', '').replace('"', '').split(',')]
    for l in f.readlines()]

f.close()

答案 1 :(得分:1)

给出一个文本文件,其中每一行都以您显示的形式显示:

('9b7dad', "text", 'http://imgur.com/gallery/SPdGm27', '1', 'A', 5)    
('2b6ebj', 'text2', 'https://i.redd.it/lzft358csdi21.jpg', '1', 'B', 6)

您可以使用Pandas,它提供了一种更直接的方式来处理/操纵不同的数据类型。

导入熊猫并读取文件,这里称为“ stack.txt”:

import pandas as pd
data = pd.read_csv('stack.txt', sep=",", header=None)

仅返回列表列表:

alist = data.values.tolist()

打印以检查:

print(alist)

[['9b7dad', 'text', 'http://imgur.com/gallery/SPdGm27', '1', 'A', 5], 
 ['2b6ebj', 'text2', 'https://i.redd.it/lzft358csdi21.jpg', '1', 'B', 6]]

如果需要处理列:

for i in range(len(data.columns)):
    if i == 0:
        data[i] = data[i].map(lambda x: str(x)[1:])
        data[i] = data[i].map(lambda x: str(x)[1:-1])
    if i == 5:
        data[i] = data[i].map(lambda x: str(x)[:-1])
        data[i] = data[i].astype(int)
    if 0 < i < 5:
        data[i] = data[i].map(lambda x: str(x)[2:-1])

答案 2 :(得分:0)

#!/usr/bin/env python

import sys

myList = []
for line in sys.stdin:
    elems = line.strip('()\n').replace(' ', '').split(',')
    elems = [x.strip('\'\"') for x in elems]
    myList.append(elems)

print(myList[0][0])
print(myList[1][1])

要使用:

$ python ./load.py < someText.txt
9b7dad
text2

根据需要使用int()float()str()elems中的字段强制转换为某些类型。使用try..except块来捕获格式错误的输入。

答案 3 :(得分:0)

import ast

with open(file_name) as f:
    content = f.readlines()
content = [list(ast.literal_eval(x)) for x in content]

如何读取文件: In Python, how do I read a file line-by-line into a list?

有关评估的更多信息: Convert string representation of list to list

答案 4 :(得分:0)

尝试一下(将元组转换为列表):

my_list = []
my_list.append(list('9b7dad', "text", 'http://imgur.com/gallery/SPdGm27', '1', 'A', 5))
my_list.append(list('2b6ebj', 'text2', 'https://i.redd.it/lzft358csdi21.jpg', '1', 'B', 6))

result是列表的列表,即二维列表。您可以轻松地修改代码以一次在for循环中获取一行并将其附加到列表中。如果它是逗号分隔的列表而不是元组,请考虑使用split(',')

mylist = []
with open(filename, 'r') as my_file:
   for text in my_file.readlines()
       my_list.append(text.split(','))