每次只读一行,最后有或没有“\ n”

时间:2014-05-01 17:26:39

标签: python file

我有一个像这样填充的文件:

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” 感谢

3 个答案:

答案 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)

您可以轻松地将数据设为字典而不是列表。