这里是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
感谢。
答案 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']