Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将txt文件的一部分写入csv时,每一行的每一个字符都会被分配一个新列_Python_Regex_Csv - Fatal编程技术网

Python 将txt文件的一部分写入csv时,每一行的每一个字符都会被分配一个新列

Python 将txt文件的一部分写入csv时,每一行的每一个字符都会被分配一个新列,python,regex,csv,Python,Regex,Csv,我制作了一个程序,它读取文本文件的所有行,然后找到行的一部分,其中一个特定字符串以Kbits结尾。对于发生这种情况的所有行,我将在Kbits(一个int)前面的部分放入一个列表,然后将其写入csv文件。问题是,当我写入csv文件时,Int被拆分,每个数字都被分配给csv文件中的一个新列。我有一个想法,这和我打字的方式有关,但我搞不清楚。 我正在使用Python 2.7 txt文件中的一行如下所示: [2018-01-24 14:57:05,766] [ 5] 2.00-3.00 sec

我制作了一个程序,它读取文本文件的所有行,然后找到行的一部分,其中一个特定字符串以Kbits结尾。对于发生这种情况的所有行,我将在Kbits(一个int)前面的部分放入一个列表,然后将其写入csv文件。问题是,当我写入csv文件时,Int被拆分,每个数字都被分配给csv文件中的一个新列。我有一个想法,这和我打字的方式有关,但我搞不清楚。 我正在使用Python 2.7

txt文件中的一行如下所示:

[2018-01-24 14:57:05,766] [  5]   2.00-3.00   sec   872 KBytes  7140 Kbits/sec  2.714 ms  693/1326 (52%) 
对于这一行,我希望在.csv文件中有一个
7140

我的代码如下:

lst = []
myfile = file('file.csv', 'wb')
txtfile = open('file.txt')

for line in txtfile:
    line = str(re.findall('\d*\ Kbits', line))
    if(line == "[]"):
        r = 1
    else:
        new = line.replace(" Kbits", "")
        lst.append(new)

wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
for i in range(0, len(lst)):
    wr.writerow(lst[i])
txtfile.close()
请尝试以下操作:

import re
import csv

with open('file.txt', 'rb') as f_input, open('file.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output, quoting=csv.QUOTE_ALL)

    for row in f_input:
        kbits = re.findall('(\d+)\ Kbits', row)

        if kbits:
            csv_output.writerow(kbits)
例如,您的示例行
file.csv
如下所示:

“7140”

能否提供一些输入字符串,以及在
.csv
文件中需要什么?只需编辑问题。我也可以得到输出,问题发生在我只需要数字部分的时候。因此,与“7140 Kbits”不同,我只想要“7140”,还要注意的是,完整的.txt文件中的一些行不包含带有“Kbits”的行。您只需要使用
(\d+)
,我已经更新了脚本。谢谢,这很有效。我想我可能一开始就把它复杂化了。