python writeline来自由.split()生成的列表

python writeline来自由.split()生成的列表,python,delimited-text,Python,Delimited Text,我有一个很长的字符串,带有垂直和水平分隔符,格式如下: [|Bob Hunter|555-5555|B|Polycity|AK|55555||#|Rob Punter|999-5555|B|Bolycity|AZ|55559|rpunter@email.com|#|....and so on...] 我想使用split(“#”)从这个长字符串生成一个列表,然后将每个元素作为一行写入一个新的文本文件,如下所示: |Bob Hunter|555-5555|B|Polycity|AK|55555||

我有一个很长的字符串,带有垂直和水平分隔符,格式如下:

[|Bob Hunter|555-5555|B|Polycity|AK|55555||#|Rob Punter|999-5555|B|Bolycity|AZ|55559|rpunter@email.com|#|....and so on...]
我想使用split(“#”)从这个长字符串生成一个列表,然后将每个元素作为一行写入一个新的文本文件,如下所示:

|Bob Hunter|555-5555|B|Polycity|AK|55555||
|Rob Punter|999-5555|B|Bolycity|AZ|55559|rpunter@email.com|
然后,我将其导入excel并按管道进行分隔

f1 = open(r'C:\Documents\MyData.html','r')
f2 = open(r'C:\Documents\MyData_formatted.txt','w')

lines = f1.read().split("#")
for i in lines:
    f2.writelines(i)

f2.close()
f1.close()

但是,txt文件只保留一行,并且只有部分数据写入该文件(只有大约25%)。如何让python按#符号分割数据,并将结果列表中的每个元素作为新行写入文件?

我认为在每次
之前,我们也应该删除
,因为如果不这样做,在每次分割rocord之后,我们将得到
|
作为每行的第一个字符。这就是为什么我们应该拆分
|#
,而不仅仅是
#

试试这个:

with open('input.txt','r') as f1:
    text = f1.read().lstrip('[').rstrip(']').split("|#") #remove '[' and ']' from each side

with open('output.txt','w') as f2:
        for line in text:
            f2.write('%s\n' % line) #write to file as string with new line sign

这是您更正的代码,我将
变量更改为
记录
,因为我们不处理行,只是为了避免混淆:

records = f1.read()
records = records[1:]          # remove [
records = records[:-1]         # remove ]
records = records.split("#")

for rec in records:
    f2.write(rec + "\n")
由于您提到您需要excel中的数据,请使用csv文件并从excel打开csv输出文件,excel将根据需要格式化您的输出,而无需手动执行此操作:

import csv
w = csv.writer(f2, dialect="excel")
records = [line.replace("|", ",") +"\n" for line in records]

for rec in records:
    w.writerow([rec])

如果
i
是字符串,则无法复制、拆分精细
writelines(i)
相当于
write(i)
。您缺少换行符,基本上只是从文件中删除所有出现的
“#”
。使用
print
或在每行后面追加换行符
write('\n')
。但这并不能解释你是如何观察部分数据的。如何检查内容?只需打印行检查即可。它有什么?
f2.write(i+'\n')
@Jay Parikh它打印了几千行,然后停了下来,非常担心,检查这个花了很长时间。我试图检查Fempter的答案,但在代码与您的解决方案配合使用后,更改太多。Fempter的回答可能会提供更精确的输出,但您的解决方案完全符合我的要求。谢谢感谢您的支持,但是我的代码在加入direprobs解决方案后发生了很大的变化,如果不将我的脚本分解到我所熟悉的程度,我就无法使用您的代码。我最终用另一个解决方案解决了问题,它按照我的要求做了,我对弄乱一个工作脚本感到非常害怕。然而,我确实看到了你的建议将如何产生更精确的输出。谢谢