我目前有一个unicode格式的文本文件,看起来像这样
Dr. A ABCD
abcdef
xyzvw
mn o p
qqq qq
Dr. E EFCD
acdsed
zxcve
fgh ij
kl mn o
我正在尝试将其格式化,使其看起来像这样
Dr. A ABCD,abcdef,xyzvw,mn o p,qqq qq
Dr. E EFCD,acdsed,zxcve,fgh ij,kl mn o
但我总是最终消除Dr.和A之间的空间或其间的其他空间。我试图使用split()然后“,”。join()但我总是严重格式化文件。在Python中需要一些帮助。
修改
条目本身可能存在空格。我这样编辑了这个问题。
答案 0 :(得分:0)
您的文件标签是否已分隔?如果是这样,您应该能够指定分隔符是一个选项卡,Python应该能够检测隐藏的行返回(\ n)。这是文档:来自:http://docs.python.org/2/library/csv.html
import csv
with open('myfile.csv', 'rb') as myfile:
myreader = csv.reader(myfile, delimiter='\t')
for row in myreader:
print ','.join(row)
已编辑 - 发现数据来自HTML,因此我建议使用BeautifulSoup4来保留数据结构。文档在这里(http://www.crummy.com/software/BeautifulSoup/bs4/doc/)在下面添加了示例代码:
from bs4 import BeautifulSoup
soup = BeautifulSoup(myfile.html) # Can also be string of text showing HTML
print(soup.prettify())
# <html>
# <head>
# <title>...
print soup.title
# Can use this format to get whichever part of the text you're scraping from
答案 1 :(得分:0)
您可以使用正则表达式模块
In [19]: a = """Dr. A ABCD
abcdef
xyzvw
mnop
qqqqq
"""
In [20]: ','.join(re.findall('\"[^\"]*\"|\S+', a))
Out[20]: 'Dr.,A,ABCD,abcdef,xyzvw,mnop,qqqqq'
答案 2 :(得分:0)
假设所有字段都包含数据,即没有空白字段,这将起作用:
from itertools import izip_longest
# from the itertools documentation http://docs.python.org/2/library/itertools.html
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
txt = (s for s in (line.strip() for line in inf) if s) # drop all blank lines
doctors = list(grouper(txt, 5, ''))
,在给定输入时,返回
[
('Dr. A ABCD', 'abcdef', 'xyzvw', 'mnop', 'qqqqq'),
('Dr. E EFCD', 'acdsed', 'zxcve', 'fghij', 'klmno')
]
答案 3 :(得分:0)
我将文本复制到text.txt文件中。
我只是在字符串的开头创建一个没有空格的新列表。 然后我将其打印为csv文件:用逗号分隔值,如果'博士'则添加换行符
这是我的代码:
with open('text.txt', 'r') as file:
mytext = file.read()
splitted = mytext.split('\n')
newlist =[]
for element in splitted:
i=0
for i in range(len(element)):
if element[i] == ' ':
pass
else:
newlist.append(element[i:]) #add to the list
break
print(newlist)
with open('csv.csv', 'w') as csv:
for element in newlist:
if element.startswith('Dr.'): #start a new line if 'Dr.'
csv.write('\n'+ element + ',')
else:
csv.write(element + ',')
答案 4 :(得分:-1)
无法专门用Python帮助你,但你需要做的是搜索并删除你找到的/ r / n,然后修剪你得到的字符串。