Python 将文件格式化为csv
我目前有一个unicode格式的文本文件,看起来像这样Python 将文件格式化为csv,python,csv,formatting,newline,pretty-print,Python,Csv,Formatting,Newline,Pretty Print,我目前有一个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
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 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方面的帮助
编辑
条目本身可能存在空格。我对问题进行了这样的编辑。在Python中无法具体帮助您,但您需要做的是搜索并删除正在查找的/r/n,然后修剪得到的字符串。文件选项卡是否有分隔符?如果是这样,您应该能够指定分隔符是一个选项卡,并且Python应该能够检测隐藏行返回(\n)。以下是文档:来自: 已编辑-发现数据来自HTML,因此我建议使用BeautifulSoup4保留数据结构。文档在此处()添加了以下示例代码:
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
从bs4导入美化组
soup=BeautifulSoup(myfile.html)#也可以是显示html的文本字符串
打印(soup.prettify())
#
#
# ...
打印名称
#可以使用此格式获取要从中删除的文本的任何部分
您可以使用正则表达式模块
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'
假设所有字段都包含数据,即没有空白字段,这将起作用:
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')
]
我在text.txt文件中复制了您的文本 我只是创建了一个新列表,在字符串的开头没有空格。 然后我将其打印为csv文件:用逗号分隔值,如果“Dr.”则添加一个换行符 这是我的密码:
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 + ',')
我试过你的案例,但它在Dr.和A以及ABCD之间引入了逗号。有没有可能把它命名为Dr.A ABCD,abcdef,…。它实际上是一个html文件,我只是从中提取了文本。所以剩余的空间就是标签原来所在的地方。@Sarkar:嗯。。。如果直接从原始html文件中提取数据,可能更容易获得准确的数据;利用这个结构,而不是扔掉它。在这种情况下,我同意休的观点,并且认为你应该保留HTML的格式。我建议使用BeautifulSoup4来实现这一点。这是他们的链接:我正在使用这个问题的html结构,但我不能正确地获得空格