我有一个像这样填充的文件:
Samsung CLP 680/ CLX6260 + CLT-C506S/ELS + CLT-M506S/ELS + CLT-Y506S/ELS + 39.50
Xerox Phaser 6000/6010/6015 + 106R01627 + 106R01628 + 106R01629 + 8.43
Xerox DocuPrint 6110/6110mfp + 106R01206 + 106R01204 + 106R01205 + 7.60
Xerox Phaser 6121/6121D + 106R01466 + 106R01467 + 106R01468 + 18.20
当我阅读时:
for line in excelRead:
title=line.split("+")
title=[lines.strip()for lines in title]
有时在行的末尾有一个“\ n”,有时没有,如果行以\ n分割结束给我5个元素,如果不是9等等,直到它找到并且“\ n “正如我猜的那样
所以,问题是:我如何每次只读取一行文件,并且每次都获得5个元素,最后是否有“\ n”?我无法检查所有文件是否存在,或者最后是否为“\ n” 感谢
答案 0 :(得分:0)
for line in excelRead:
title = [x.strip() for x in line.rstrip('\n').split('+')]
最好避免让一个变量(title
)表示两个不同的东西。我没有在第二行中给它一个不同的名称,而是完全删除了该行,并将split
放在列表理解中。
不是将line
提供给split
,而是先rstrip
\n
(从最后删除该字符)
答案 1 :(得分:0)
您可以考虑使用csv模块解析它,并按模型放入dict:
import csv
data={}
with open('/tmp/excel.csv') as f:
for line in csv.reader(f, delimiter='+', skipinitialspace=True):
data[line[0].strip()]=[e.strip() for e in line[1:]]
print data
# {'Samsung CLP 680/ CLX6260': ['CLT-C506S/ELS', 'CLT-M506S/ELS', 'CLT-Y506S/ELS', '39.50'],
'Xerox Phaser 6121/6121D': ['106R01466', '106R01467', '106R01468', '18.20'],
'Xerox DocuPrint 6110/6110mfp': ['106R01206', '106R01204', '106R01205', '7.60'],
'Xerox Phaser 6000/6010/6015': ['106R01627', '106R01628', '106R01629', '8.43']}
答案 2 :(得分:0)
当缺少\ n时,这将分割标题[4]以给出两个标题:
import re
data = []
with open('aa.txt') as excelRead:
for line in excelRead:
title=line.split("+")
title=[lines.strip()for lines in title]
while len(title) > 5:
one = re.sub('(\d+\.\d+)', '', title[4])
five = title[4].replace(one, '')
title1 = title[:4] + [five]
title = [one] + title[5:]
data.append(title1)
data.append(title)
for item in data:
print(item)
您可以轻松地将数据设为字典而不是列表。