将给定文本更改为列表列表

2024-04-26 21:08:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在给定的文件中有以下文本:

1234,A,7.99,10.3,12.8,101,0.11843,0.27276,0.30101  
87635,B,19.69,21.25,130,1203,0.1096,0.1599,0.1974

首先,我想去掉前面的123487635,我还想把A变成整数"1",把B变成整数"0"。你知道吗

这是我的密码:

def convert(file):
    data = open(file, 'r')
    list1 = []
    for line in data:
        line_data = line.strip().split(',')
        if line_data[0] == "B":
            line_data[0] = 0
        else:
            line_data[0] = 1
        for i in range(len(line)):
             datalist.append(line)
    list1 = np.array(list1), float
    data.close()
    return list1

这是我想要的输出:

[[1234,A,7.99,10.3,12.8,101,0.11843,0.27276,0.30101], [87635,B,19.69,21.25,130,1203,0.1096,0.1599,0.1974]]

我当前得到的输出是list字符串,而不是列表列表。你知道吗


Tags: 文件in文本密码convert列表fordata
1条回答
网友
1楼 · 发布于 2024-04-26 21:08:01

您将获得liststrings,因为您将作为-

datalist.append(line)

它附加了原始的line,而不是更改的line_data。另外,line_data中的所有元素仍然是字符串(第一个元素除外),因为您永远不会将它们转换为int

这里最简单的方法是使用csv模块,将文件解析为csv,然后从返回的每一行中弹出第一个元素,然后更改第二个元素(现在根据需要删除第一个元素)。示例-

def convert(file):
    import csv
    lst = []
    with open('<filename>','r') as f:
        reader = csv.reader(f)
        for row in reader:
                row.pop(0)
                if row[0] == 'B':
                        row[0] = 0
                else:
                        row[0] = 1
                lst.append(list(map(float, row)))
    return lst

示例/演示-

我的a.csv-

1234,A,7.99,10.3,12.8,101,0.11843,0.27276,0.30101  
87635,B,19.69,21.25,130,1203,0.1096,0.1599,0.1974

代码和结果-

>>> import csv
>>> with open('a.csv','r') as f:
...     reader = csv.reader(f)
...     lst = []
...     for row in reader:
...             row.pop(0)
...             if row[0] == 'B':
...                     row[0] = 0
...             else:
...                     row[0] = 1
...             lst.append(list(map(float, row)))
...
'1234'
'87635'
>>> lst
[[1.0, 7.99, 10.3, 12.8, 101.0, 0.11843, 0.27276, 0.30101], [0.0, 19.69, 21.25, 130.0, 1203.0, 0.1096, 0.1599, 0.1974]]

相关问题 更多 >