如何删除多个空格,换行符和制表符,并将单个空格放在文本文件中?

时间:2017-09-18 10:20:59

标签: python parsing formatting text-parsing

我有来自here的莎士比亚全集数据,我希望在单词嵌入算法中使用它来创建模型。模型的要求是整个文本只提供单个空格,不存在其他类型的空格。我怎么能这样做?我发现如何为单个字符串执行此操作,但它不适用于文本文件。

我的尝试(我不是很了解python):

    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    class GradientPane extends JComponent {
      public void paint(Graphics g) {
        Graphics2D g2D = (Graphics2D) g;
        Point2D.Float p1 = new Point2D.Float(150.f, 75.f); // Gradient line start
        Point2D.Float p2 = new Point2D.Float(250.f, 75.f); // Gradient line end
        float width = 300;
        float height = 50;
        Rectangle2D.Float rect1 = new Rectangle2D.Float(p1.x - 100, p1.y - 25, width, height);
        GradientPaint g2 = new GradientPaint(p1, Color.WHITE, p2, Color.DARK_GRAY, false); // Acyclic gradient

        rect1.setRect(p1.x - 100, p1.y - 25, width, height);
        g2D.setPaint(g2); // Gradient color fill
        g2D.fill(rect1); // Fill the rectangle
        g2D.setPaint(Color.BLACK); // Outline in black
        g2D.draw(rect1); // Fill the rectangle
        g2D.draw(new Line2D.Float(p1, p2));
      }
    }    
    public class AcyclicGradientPaint {
      public static void main(String[] a) {
         JFrame window = new JFrame("Acyclic Gradient Paint");
         window.setBounds(30, 30, 300, 300);
         window.getContentPane().add(new GradientPane());
         window.setVisible(true);
      }
    }

清理后的线条在打印时没有删除with open(file_path, 'r') as data: for line in data: cleanedline = line.strip('\n') ,所以我没有将它们写回文件。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用正则表达式:

import re

with open(file_path) as data:
    text = re.sub(r'\s+', ' ', data.read())

\s+正则表达式模式将匹配一个或多个空白字符的任何序列。 re.sub()会将匹配的文本替换为单个空格。

空格由空格,制表符,换行符,返回表,换页符,垂直制表符等字符组成。它不包括标点符号。

另一种没有正则表达式的方法是使用split()然后join()

with open(file_path) as data:
    text = ' '.join(data.read().split())