巨大的新手到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]
我一直在寻找这里的答案,但他们并没有完全填写这个问题。
答案 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”的工作表,如下所示
希望这会有所帮助
答案 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]