Python文本文件字符串到电子表格中的列

时间:2014-01-23 18:34:41

标签: python export-to-excel

巨大的新手到python,这可能很容易,但我根本无法理解它。

我有一个文本文件,其格式为

 nothing doing    nothing[0]    doing[0] 
 hello world      hello[0]        world[2]

字符串之间只有空格,没有标记。

我想以下列格式将这些字符串提取到excel文件中 - 这样每个'set'字符串都在一个单独的列中。

           |        1      |       2        |       3
    ------------------------------------------------------
      1    | nothing doing |   nothing[0]   |  doing[0] 
    ------------------------------------------------------
      2    | hello world   |   hello[0]     |  world[2]

我一直在寻找这里的答案,但他们并没有完全填写这个问题。

4 个答案:

答案 0 :(得分:3)

好的,这是你如何写入实际的Excel文件。请注意,我的分割方法并不像其他方法那么复杂,因为这主要是关于写入Excel。您需要python-excel包才能执行此操作。

>>> data = []
>>> with open("data.txt") as f:
...     for line in f:
...         data.append([word for word in line.split("  ") if word])
...
>>> print data
[['nothing doing', 'nothing[0]', 'doing[0]\n'], ['hello world', 'hello[0]', 'world[2]']]
>>>
>>> import xlwt
>>> wb = xlwt.Workbook()
>>> sheet = wb.add_sheet("New Sheet")
>>> for row_index in range(len(data)):
...     for col_index in range(len(data[row_index])):
...         sheet.write(row_index, col_index, data[row_index][col_index])
>>>
>>> wb.save("newSheet.xls")
>>>

这会生成一个工作簿,其中包含一个名为“New Sheet”的工作表,如下所示

Sample output

希望这会有所帮助

答案 1 :(得分:0)

您可以使用numpy来读取txt文件,使用csv将其写为csv文件。 csv包等允许您选择偏好的分隔符。

import numpy
import csv

data = numpy.loadtxt('txtfile.txt', dtype=str)

with open('csvfile.csv', 'w') as fobj:
    csvwriter = csv.writer(fobj, delimiter=',')
    for row in data:
        csvwriter.writerow(row)

答案 2 :(得分:0)

以下假设每个“列”由一行中的两个或多个空格字符分隔,并且它们的内容中绝不会包含逗号。

import csv
import re

splitting_pattern = re.compile(r" {2,}")  # two or more spaces in a row
input_filepath = 'text_file_strings.txt'
output_filepath = 'output.csv'

with open(input_filepath, 'rt') as inf, open(output_filepath, 'wb') as outf:
    writer = csv.writer(outf, dialect='excel')
    writer.writerow([''] + range(1, 4))  # header row
    for i, line in enumerate(inf, 1):
        line = splitting_pattern.sub(',', line.strip())
        writer.writerow([i] + line.split(','))

创建的output.csv文件的内容:

,1,2,3
1,nothing doing,nothing[0],doing[0]
2,hello world,hello[0],world[2]

答案 3 :(得分:0)

有时,主要使用Excel的人会对Excel显示其工作表的方式与文件中的csv表示之间的区别感到困惑。在这里,尽管@martineau给了你你想要的东西,但我认为你真正想要的更像是:

import re, csv

with open("infile.txt") as fp_in, open("outfile.csv", "wb") as fp_out:
    writer = csv.writer(fp_out)
    for line in fp_in:
        row = re.split("\s\s+", line.strip())
        writer.writerow(row)

将转为

$ cat infile.txt 
nothing doing    nothing[0]    doing[0] 
hello world      hello[0]        world[2]

$ cat outfile.csv 
nothing doing,nothing[0],doing[0]
hello world,hello[0],world[2]