2016-05-14 80 views
0

我有有datat一排很长(例如下面)如何通过蟒蛇(从txt文件)

234.45 234.3455 667.4556 566.3311 332.333 564.322 554.2564 21.203 

我想读一个txt文件很长行的数据分成两列该.txt文件,Python和希望将数据分成两列如下:

234.45 234.3455 
667.4556 566.3311 
332.333 564.322 
554.2564 21.203 

我是新来的蟒蛇,我不知道如何加载读取.txt文件和数据分割成列?任何人都可以帮助我?谢谢你。

+0

从你的第一个项目到第二个项目你有两个空格,所有其他的都有一个空格。这是你的实际文件格式还是只是一个错字? – Keatinge

回答

0

关键是通过每一个项目,如果在列表中的项目的索引你循环甚至您添加到col1否则添加到col2

这将与任意数量的空格分隔的项目工作

import re 
with open("test.txt") as f: 
    inputString = f.read() 

#remove all extra spaces so all items separated by only one space 
inputString = re.sub(r" +", " ", inputString) 

itemsInString = inputString.split(" ") 

col1 = [] 
col2 = [] 
for index, item in enumerate(itemsInString): 
    if index % 2 == 0: 
     col1.append(float(item)) 
    else: 
     col2.append(float(item)) 

print(col1) 
print(col2) 

这给你以下几点:
COL1 = [234.45, 667.4556, 332.333, 554.2564]
COL2 = [234.3455, 566.3311, 564.322, 21.203]

写回了一个文件:

writeString = "" 
for item in zip(col1, col2): 
    writeString += str(item[0]) + " " + str(item[1]) + "\n" 

with open("outfile.txt", "w") as f: 
    f.write(writeString) 


这里还有一个更优化的方式来写,而不字符串连接到文件但它不太清楚

with open("outfile.txt", "w") as f: 
    f.write("\n".join(([" ".join([str(a[0]), str(a[1])]) for a in zip(col1, col2)]))) 
+0

嗨@Racialz,谢谢你的建议。它可以工作,但是当我打印(项目)时,它会显示列中的所有数据。所以,我做错了什么,因为我想打印他们在两列。再次。 –

+0

在for循环外使用'print(col1)'和'print(col2)' – Keatinge

+0

嗨,抱歉忘了回答。空间不固定。它可以影响代码吗?韩国社交协会。 –

1

假设你有一个名为'sample.txt'的文件。你可以做

f = open('sample.txt', 'r') 

这将打开该文件,现在用于读取文件的内容,你可以使用方法readlines方法将返回你行,或是你打电话给他们行的列表。现在,每行都是字符串,并且可以说这些数据由可以使用的空白分隔。分割方法在线生成列。

所以,你的代码可能是这样的

f = open('sample.txt', 'r') 
lines = f.readlines() 
for line in lines: 
    columns = line.split(' ') 
    print(columns) 

希望它能帮助!

+0

这是错误的,他希望将信息拆分成列,以便每个其他项目在一起。所有这一切是一个空格行,它不显示每个其他项目分组的过程 – Keatinge

+0

@Racialz是的我的不好,我忽略了分组部分。 –

0

读文件:

fp = open("abc.txt") 
content = fp.read(); 
lines = content.split("\t") #split row by tab spaces to form a list 

将输入行拆分为两个列表:

l1=[] #list1 to store col 1 
l2=[] #list2 to store col 2 
for i in range(0,len(lines)): 
    if(i%2 == 0): 
     l2.append(lines[i]) 
    else: 
     l1.append(lines[i]) 

邮编列表,形成组(你以后可能会写入文件):

for x in list(zip(l1,l2)): 
    print(x) 

写入文件:

fp=open("E:/efg.txt",'a') 
for x in list(zip(l1,l2)): 
    fp.write(('\t'.join(x))) 
    fp.write('\n') 
1

打开文件

fp = open('concernedfile.txt', 'r') 

阅读以字符串形式返回文件中的所有内容。

拆分将每个数字分成列表项。

了解更多关于拆分为http://www.tutorialspoint.com/python/string_split.htm

before_split = fp.read() 
data = before_split.split() 

查找列表的长度和附加数据

x = len(data) 
col1 = [] 
col2 = [] 
for i in range(0,x): 
    if (i % 2 == 0): 
     col1.append(data[i]) 
    else: 
     col2.append(data[i]) 

邮编可以帮助您汇总数据结构

combinedcol = zip(col1, col2) 

打印的列元组。您可以轻松地在这里进行更改。

for i in combinedcol: 
     print i