Python - 读入逗号分隔文件,创建两个列表

时间:2018-02-22 16:57:10

标签: python

这里是Python的新手,我正在努力学习/弄清楚基础知识。我正在尝试在Python中读取具有逗号分隔值的文件,一个到一行。读入后,这些值应分为两个列表,一个列表包含每行“,”之前的值,另一个列表包含其后的值。

我玩了很长一段时间,但我似乎无法得到它。

这是我到目前为止所拥有的......

with open ("mid.dat") as myfile:
    data = myfile.read().replace('\n',' ')
    print(data)

list1 = [x.strip() for x in data.split(',')]
print(list1)
list2 = ?

列表1创建一个列表,但它不正确。清单2,我甚至不确定如何解决。

PS - 我在这里搜索过其他类似的线程,但似乎没有一个能够正确解决这个问题。有问题的文件不是CSV文件,需要保留为.dat文件。

以下是.dat文件中的数据示例:

113.64,889987.226
119.64,440987774.55
330.43,446.21

感谢。

7 个答案:

答案 0 :(得分:3)

使用字符串切片:

    list1= []
    list2 = []
    with open ("mid.dat") as myfile:
        for line in myfile:
             line = line.split(",").rstrip()
             list1.append( line[0])
             list2.append( line[1])

Python的rstrip()方法默认情况下会删除所有类型的尾随空格,因此也会删除返回的“

答案 1 :(得分:2)

如果您只想使用内置程序包,可以使用 <div class="wrapper"> <div class="left"> left one </div> <div class="left"> left two </div> <div class="left"> left three </div> <div class="left"> left four </div> <div class="right"> right one </div> <div class="right"> right two </div> <div class="right"> right three </div> <div class="right"> right four </div> </div>

csv

答案 2 :(得分:1)

可以尝试这个,这会创建浮点数列表而不是字符串:

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.example.com peer channel join -b mychannel.block

如果您不介意from ast import literal_eval with open("mid.dat") as f: list1, list2 = map(list, (zip(*map(literal_eval, f.readlines())))) list1作为元组,可以简化。

list2模式是仅使用内置函数转换2D列表的常用方法。它在这种情况下非常有用,因为它很容易在文件的每一行获得一个列表(称为list(*zip(*my_2d_list)))元组(其中result将是第一个元组,并且result[0]将是第n个),然后转置result[n](称之为result),以便resultT将是所有左边的值&#39; resultT[0]将成为正确的价值观。

答案 3 :(得分:0)

你可以用熊猫做到这一点。

import pandas as pd
df = pd.read_csv('data.csv', columns=['List 1','List 2'])

如果您的数据是文本文件,则相应的功能也存在于pandas包中。 Pandas是一个非常强大的数据工具,如你的。

执行此操作后,您可以将数据拆分为两个独立的数据帧。

list1 = df['List 1']
list2 = df['List 2']

我会坚持使用数据框,因为在pandas框架中数据操作和分析更容易。

答案 4 :(得分:0)

让我们保持简单。

list1 = []
list2 = []

with open ("mid.dat") as myfile:
    for line in myfile:
        x1,x2 = map(float,line.split(','))
        list1.append(x1)
        list2.append(x2)

print(list1)
print(list2)

答案 5 :(得分:0)

我的建议是简短易读,无需安装任何其他软件包:

with open ("mid.dat") as myfile:
    listOfLines = [line.rstrip().split(',') for line in myfile]
    list1 = [line[0] for line in listOfLines]
    list2 = [line[1] for line in listOfLines]ility

注意:我使用rstrip()删除了行尾字符。

答案 6 :(得分:0)

以下是通过纠正您自己的尝试获得的解决方案:

with open("test.csv", "r") as myfile:
    datastr = myfile.read().replace("\n",",")
    datalist = datastr.split(",")
    list1 = []; list2=[]
    for i in range(len(datalist)-1):   # ignore empty last item of list
        if i%2 ==0:
            list1.append(datalist[i])
        else: 
            list2.append(datalist[i])
print(list1)
print(list2)

输出:

['113.64', '119.64', '330.43']
['889987.226', '440987774.55', '446.21']